# Mammoth Analytics: full documentation > Source: https://mammoth.io/docs/ Mammoth docs are available as Markdown: append `.md` to any docs URL, or send `Accept: text/markdown`. ChatGPT, Claude and Perplexity fetching a page for a user receive Markdown by default. Full text of every page: https://mammoth.io/docs/llms-full.txt --- # Mammoth CLI in agents and CI URL: https://mammoth.io/docs/agents/ci/ · Updated: 2026-11-02 Sign in without a terminal, pass structured input, wait on jobs, read the JSON envelope, and clean up safely. Machine behaviour turns on by itself. Running the `mammoth` CLI where there is no terminal: credentials, structured input, job handling, and a loop that fails safely. Machine behaviour is automatic. Piping or redirecting output yields the JSON envelope, and `--no-input` turns on by itself when standard input is not a real terminal. No special flags are required. Passing `--output json --no-input` explicitly anyway is good practice: it makes the intent visible in the log. ```bash mammoth project list | jq '.data' ``` ## Signing in without a terminal An agent or CI job cannot answer a hidden prompt for a secret. The CLI reads credentials from exactly two places—an explicit `--input` handed to the command, or a previously saved profile—and never from environment variables. For CI, the human operator (not the agent) provisions an owner-only (`0600`) credentials file out of band—created with those permissions from the start, not `chmod`-ed afterwards—and the run consumes it once to create a profile: ```bash mammoth auth login --input creds.json --storage file --output json --no-input mammoth doctor --output json --no-input ``` `creds.json` is `{"api_token": "mm_...", "server_prefix": "app"}`, `server_prefix` optional. Create the token in **Workspace settings → API Tokens**; a token limited to one project gets HTTP 403 in every other project, so pass that project with `--project ID`. `--storage file` is explicit on POSIX: `--storage auto` can require an OS keyring that a CI runner does not have. > **Keep credentials out of arguments and out of chat** > > Anything on the command line lands in shell history and CI logs. Use a `0600` file. Secrets never appear in any Mammoth envelope, and an agent must never ask a person to paste one into a conversation. ## Structured input Pass a multi-field request as one document rather than many flags: a file path, or `-` for stdin with an explicit `--input-format`. ```bash mammoth view transform math 1039 --project 180 \ --input '{"expression": "price * qty", "new_column": "total"}' mammoth --input request.yaml echo '{"...": "..."}' | mammoth --input - --input-format json ``` ## A reliable operation loop 1. Discover the command and its request shape with `mammoth schema get `. 2. Run reads with `--output json --no-input` and keep the ids that come back. 3. For a mutation, supply its structured input and the confirmation its policy requires (`--yes`, or `--yes --confirm TARGET`)—see [blast radius and safety](https://mammoth.io/docs/agents/safety/). 4. Inspect the exit code and `error.code`. **Retry only exit code 7.** 5. After a write, read `data.verify` and `data.state` ([errors](https://mammoth.io/docs/build/errors/)). Stop and report when `verify.needs_user` is set or `verified` is false. 6. Delete temporary resources when the run finishes, using the exact ids the run returned. ## Waiting on work Three timeouts, because three different things can be slow: - `--timeout`, per HTTP request. - `--job-timeout`, waiting on an asynchronous job. - `--pipeline-timeout`, waiting on a pipeline run. Pass `--return-running` to exit 0 with `{status: running, …, resume}` when a job or pipeline wait runs out, instead of a timeout error. Continue it with `mammoth job wait JOB_ID`, which reports success, failure or still running and waits at most 15 minutes by default. The bundled skill's own default: commands that start platform work wait up to 300 seconds for the job; on a `timeout` exit, use the `job get` recovery command the envelope printed rather than resubmitting the original mutation. ## Profiles Name the credential profile explicitly in automation, so a run cannot pick up whatever was left configured on the machine: ```bash mammoth project list --output json --no-input --profile production ``` Piped output already turns on `--output json --no-input`. `MAMMOTH_PROFILE`, `MAMMOTH_PROJECT`, `MAMMOTH_OUTPUT` and `MAMMOTH_NO_INPUT` also set session defaults, but never a credential. The CLI checks PyPI for a newer release once a day. It installs one by itself only in an interactive terminal, so a CI run or an agent never has its version changed under it; `MAMMOTH_AUTO_UPGRADE=1` forces the install on. `MAMMOTH_NO_UPDATE_CHECK=1` turns the check off, which suits a pinned CI image. ## Cleaning up Use ids the run itself returned. List or preview the target first if the run may have been interrupted, then delete explicitly. **Never match on names broadly in a cleanup script**. The bundled skill calls this out directly: cleanup is exact-ID authorized, never "delete every resource this run might have created." ```bash mammoth dataset list --project 180 --output json --no-input mammoth dataset delete DATASET_ID --project 180 --yes --output json --no-input ``` --- **Next up:** [Blast radius and safety](https://mammoth.io/docs/agents/safety/) for the mutation classes and confirmation policies in full · [Errors and exit codes](https://mammoth.io/docs/build/errors/) for the envelope, the codes, and what is worth retrying. --- # Use Mammoth with Claude URL: https://mammoth.io/docs/agents/claude/ · Updated: 2026-11-02 Use Mammoth from Claude Code with the Mammoth CLI and skill, and search Mammoth docs from Claude, Claude Desktop or Claude Code through the docs MCP server. Yes, you can use Mammoth with Claude, in three ways: - **Claude Code works on your Mammoth data.** Install the Mammoth CLI and its bundled skill, and Claude Code can find, read and change datasets, views and pipelines in your workspace, asking for confirmation before anything destructive. - **Any Claude app can work on your Mammoth data through the Mammoth MCP server.** Add `https://mcp.mammoth.io/mcp` as a custom connector, sign in to Mammoth when asked, and Claude can read and change your workspace as you. See [Mammoth MCP server](https://mammoth.io/docs/agents/mcp/). - **Any Claude app can look up Mammoth documentation.** Connect the documentation MCP server at `https://mammoth.io/docs/mcp/` to Claude on the web, Claude Desktop or Claude Code, and Claude answers Mammoth questions from these docs instead of from memory. The documentation server alone can read the documentation but can't act on a workspace. To act on a workspace from chat, use the [Mammoth MCP server](https://mammoth.io/docs/agents/mcp/); in Claude Code you can also use the CLI. ## Work on your Mammoth data from Claude Code Install the CLI. The installer also installs the skill for Claude Code, at `~/.claude/skills/mammoth-cli/`: ```bash curl -fsSL https://raw.githubusercontent.com/EdgeMetric/mammothsdk/main/mammoth-cli/installers/mammoth-install.sh | sh mammoth skill list # confirm the skill landed ``` Sign in once, in your own terminal. Claude Code never asks for your API token and never signs in for you: ```bash mammoth auth login ``` Then ask Claude Code for what you want, for example "list the datasets in my Mammoth workspace" or "add a step to the Orders view that removes duplicate rows". The skill teaches Claude Code how to discover commands, pass input, and confirm changes. Every command declares how risky it is, and Claude Code confirms before running anything destructive. - [Mammoth for coding agents](https://mammoth.io/docs/agents/): install options, authentication and the command contract - [Agent skill](https://mammoth.io/docs/agents/skill/): what the skill installs, and how to install it for one project only - [Blast radius and safety](https://mammoth.io/docs/agents/safety/): what each confirmation level means ## Look up Mammoth documentation from Claude The documentation MCP server answers questions about Mammoth from this site. It needs no Mammoth account and no sign-in, and it can't read or change a workspace. It has three tools: | Tool | What it does | | --- | --- | | `search_docs` | Searches the documentation and returns matching pages with links | | `get_doc` | Returns one page as Markdown | | `list_docs` | Lists every page | ### Claude on the web and Claude Desktop Add the server as a custom connector, with this URL and no sign-in: ``` https://mammoth.io/docs/mcp/ ``` A connector added to your Claude account is available in both Claude on the web and Claude Desktop. Custom connectors are available on every Claude plan; the Free plan allows one. On Team and Enterprise plans, an organization owner adds the connector for the organization first, and each member then connects it. Anthropic's [guide to custom connectors](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) has the current steps. ### Claude Code ```bash claude mcp add --transport http mammoth-docs https://mammoth.io/docs/mcp/ ``` The server is added for the current project only. Add `--scope user` to use it in every project, or `--scope project` to share it with your team through the project's `.mcp.json`. Run `claude mcp list`, or `/mcp` inside a session, to check that it's connected. ## Other ways to read these docs Every page has a Markdown version: append `.md` to its URL. [`/llms.txt`](https://mammoth.io/docs/llms.txt) is the index of every page, written for language models, and [`/llms-full.txt`](https://mammoth.io/docs/llms-full.txt) has every page's content in one file. The [docs for machines](https://mammoth.io/docs/agents/#docs-for-machines) section explains these. --- # Mammoth for coding agents URL: https://mammoth.io/docs/agents/ · Updated: 2026-11-02 Install the Mammoth CLI and its bundled skill, then let Claude Code, Codex or Cursor discover, read and safely mutate your Mammoth data. Mammoth Analytics is a data platform: workspaces contain projects, projects contain datasets, and datasets carry one or more views, each a pipeline of transformation steps. The `mammoth` CLI is the agent interface—it describes itself at runtime, emits a stable JSON envelope, and declares how dangerous every operation is before it runs. > **Setting Mammoth up for yourself, not for an agent?** > > Follow the [browser quickstart](https://mammoth.io/docs/learn/getting-started/) instead. ## Install ```bash curl -fsSL https://raw.githubusercontent.com/EdgeMetric/mammothsdk/main/mammoth-cli/installers/mammoth-install.sh | sh mammoth skill list # confirm the skill landed ``` The installer needs no Python tool manager of its own, checks that the CLI starts, and installs the bundled agent skill, which teaches your coding agent the CLI's authentication, discovery, input, and confirmation conventions. Already using `pipx` or `pip`? Install the package, then add the skill yourself: ```bash pipx install mammoth-cli # or: pip install --no-cache-dir --upgrade mammoth-cli mammoth skill install mammoth --version # check you got the newest release ``` `--no-cache-dir` matters right after a release: a cached package index can still hand out the previous version. Once installed, `mammoth upgrade` moves to the latest release, and an envelope carrying `meta.update_available` names the command to run. Auto-update installs only in an interactive terminal; set `MAMMOTH_AUTO_UPGRADE=1` to force it in CI or an agent run. `mammoth skill install` copies the skill into every agent it knows about at once. The default target is user scope for Claude Code, Codex and Cursor; see [the agent skill](https://mammoth.io/docs/agents/skill/) for project-scoped installs and per-agent targeting. Alternatively, if your tooling speaks the community `skills` convention: ```bash npx skills add https://mammoth.io/docs ``` ## Authenticate The CLI does not read credentials from environment variables or arguments; it takes the token only from its hidden prompt or an `--input` file. The credential is an API token (`mm_...`, from **Workspace settings → API Tokens** in the web app); the token names its own workspace. A person at their own terminal can sign in through the browser (`mammoth auth login --method oauth`) or with a device code (`--method device`) instead; see [API authentication](https://mammoth.io/docs/build/auth/). It is stored once via `mammoth auth login` in the OS keyring (or an explicitly chosen `0600` file on headless POSIX systems), then reused by profile. The bundled skill is explicit that an agent must never ask a person for the token in chat, and must never run `mammoth auth login` itself unless it has been handed a protected credentials file to use: > If no profile has credentials, tell the operator to run `mammoth auth login` in their own terminal (add `--profile NAME` only for a profile other than `default`; …) and wait; never ask for the token in chat, never read one from a file or environment variable, never run `auth login` yourself. For CI or another fully unattended run, the human operator (not the agent) provisions an owner-only (`0600`) credentials file out of band, created with those permissions from the start rather than `chmod`-ed afterwards: ```bash mammoth auth login --input creds.json --storage file --output json --no-input mammoth doctor --output json --no-input ``` `doctor` is the precondition check: auth, endpoint, connectivity and version. Treat a `doctor` failure as a reason to stop, not a reason to try the next command anyway. ## A prompt to give your agent ``` Follow https://mammoth.io/docs/agents/. Set up Mammoth in this project. Tell me the command to run to sign in, and wait. Show me what changed. ``` Your agent will land on this page, read the Authenticate section above, and follow the CLI's real mechanism: `mammoth auth login`, run by you, not by it. ## Discover the contract ```bash mammoth schema find "merge two datasets" --output json --no-input # find the command for a goal; the top matches carry their input fields and an example mammoth schema list --output json --no-input # every command, by family mammoth schema get --output json --no-input # one command in full: input, mutation_class, confirmation mammoth capability list --output json --no-input # the Python SDK method and API operation behind each command ``` A write adds a `verify` verdict and a fresh `state` read-back to its result; read them before you report the change as done. Every result is one JSON envelope on stdout: ```json {"schema_version": 1, "data": , "meta": {"command": "…"}} ``` and every failure is one JSON envelope on stderr, with a stable `error.code` to branch on—never the message text: ```json {"schema_version": 1, "error": {"code": "…", "message": "…", "hint": "…", "retryable": false, "recovery_commands": ["…"]}} ``` Full envelope shape, the exit-code table and rate limits live on [errors and exit codes](https://mammoth.io/docs/build/errors/), which owns them. ## Where things are - [`/build/`](https://mammoth.io/docs/build/)—the API, CLI and SDK reference, and the generated capability contract - [`/build/cli/`](https://mammoth.io/docs/build/cli/)—the CLI's command families, one at a time - [Agent skill](https://mammoth.io/docs/agents/skill/)—what `mammoth skill install` puts on disk, and how to target it - [Use Mammoth with Claude](https://mammoth.io/docs/agents/claude/)—Claude Code with the CLI, and the docs MCP server in Claude on the web, Claude Desktop, and Claude Code - [Mammoth MCP server](https://mammoth.io/docs/agents/mcp/)—the hosted server at `https://mcp.mammoth.io/mcp` for MCP clients that act on a workspace - [Agents and CI](https://mammoth.io/docs/agents/ci/)—non-interactive operation: signing in without a terminal, structured input, job handling - [Blast radius and safety](https://mammoth.io/docs/agents/safety/)—the mutation classes and confirmation policies every command declares - [`/llms.txt`](https://mammoth.io/docs/llms.txt)—the machine-readable index of this documentation ## Docs for machines Every page on this site has a machine-readable twin: append `.md` to a doc's URL, or send `Accept: text/markdown` on the request, to get the same content as plain Markdown instead of the rendered page. `/llms.txt` is the flat index of the whole site for a model to read before it fetches anything else; `/llms-full.txt` is the same index with every page's content concatenated inline, for a client that would rather read once than crawl. `/.well-known/skills/index.json` lists the skills this site publishes in the community `skills` discovery format, which is what `npx skills add` above reads. Separately, a documentation-search MCP server runs at `https://mammoth.io/docs/mcp/`: three tools—`search_docs`, `get_doc` and `list_docs`—over streamable-HTTP, with no authentication required, so you can look up Mammoth documentation without a Mammoth account. It answers questions about Mammoth; it does not act on a Mammoth workspace. To act on a workspace, use the CLI above, or the [Mammoth MCP server](https://mammoth.io/docs/agents/mcp/) at `https://mcp.mammoth.io/mcp`. [Use Mammoth with Claude](https://mammoth.io/docs/agents/claude/) has the setup for Claude on the web, Claude Desktop, and Claude Code. --- # Mammoth MCP server URL: https://mammoth.io/docs/agents/mcp/ · Updated: 2026-11-02 Connect an MCP client such as Claude, ChatGPT or VS Code to your Mammoth workspace at https://mcp.mammoth.io/mcp. Setup per client, OAuth sign-in, revoking access, and the full tool list. The Mammoth MCP server lets an AI client explore, clean, transform and export your Mammoth data. It is hosted at: ``` https://mcp.mammoth.io/mcp ``` Nothing to install. The client signs you in to Mammoth with OAuth, and every tool call then runs as you, with your permissions. ## This server and the documentation server Mammoth has two MCP servers. They do different jobs. | | Mammoth MCP server | Documentation MCP server | | --- | --- | --- | | URL | `https://mcp.mammoth.io/mcp` | `https://mammoth.io/docs/mcp/` | | Sign-in | OAuth: you approve the connection on a Mammoth consent page | None | | Reads your workspace | Yes, as you | No | | Changes your workspace | Yes, as you | No | | Use it for | Working on your datasets, views, pipelines, dashboards, automations and exports | Looking up how Mammoth works from these docs | See [Use Mammoth with Claude](https://mammoth.io/docs/agents/claude/) for the documentation server. To act on a workspace from a terminal instead, use the [CLI](https://mammoth.io/docs/agents/). ## Set up your client ### Claude on the web and Claude Desktop Add a custom connector with this URL, then sign in to Mammoth when Claude asks: ``` https://mcp.mammoth.io/mcp ``` Anthropic's [guide to custom connectors](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp) has the current steps, including how an organization owner adds a connector on Team and Enterprise plans. **Fewer approval prompts.** By default Claude asks you before every tool call. In the connector's settings, set **Read-only tools** and **Interactive tools** to **Always allow**. Claude then runs reads and uploads without asking, and still asks before a tool that changes, deletes or sends out data. ### Claude Code ```bash claude mcp add --transport http mammoth https://mcp.mammoth.io/mcp ``` Then run `/mcp` inside a session and choose **mammoth** to sign in. Add `--scope user` to use the server in every project. ### ChatGPT On the web, in ChatGPT: 1. Go to ChatGPT Plugins, select the plus button, and choose **Add custom MCP server**. 2. Enter a name. Under **Connection**, enter the Server URL: ``` https://mcp.mammoth.io/mcp ``` 3. Set authentication to **OAuth**. Choose Client ID Metadata Documents (CIMD) if ChatGPT offers the choice: Mammoth supports CIMD and not Dynamic Client Registration (see below). 4. Review the risk warning and confirm with **I understand and want to continue**, then select **Create as a plugin**. 5. Install the plugin. You must install it before you can use it in a conversation, then sign in to Mammoth when ChatGPT asks. OpenAI's [guide to adding a custom MCP server](https://developers.openai.com/api/docs/guides/custom-mcp-server) has the current steps. ### Cursor Cursor cannot sign in to the Mammoth MCP server yet. It supports only Dynamic Client Registration, which Mammoth does not offer. In Cursor, use the [Mammoth CLI and its skill](https://mammoth.io/docs/agents/) instead. ### VS Code Add the server to `.vscode/mcp.json`: ```json { "servers": { "mammoth": { "type": "http", "url": "https://mcp.mammoth.io/mcp" } } } ``` Neither file holds a credential: the client gets its own token through the sign-in below. ## Which clients can connect Mammoth identifies a client in one of two ways: - **Client ID Metadata Documents (CIMD).** The client's `client_id` is an `https://` URL that serves a small JSON document naming the client and its redirect URIs. Mammoth fetches that document when the client starts the sign-in. The client sends a PKCE `S256` challenge and needs no secret. - **The built-in Mammoth CLI client.** The [CLI](https://mammoth.io/docs/agents/) signs in as `mammoth-cli`. Mammoth does not offer Dynamic Client Registration: its authorization server metadata has no registration endpoint. A client that can only register itself dynamically cannot connect. A client that supports Client ID Metadata Documents can. Verified to connect: ChatGPT and VS Code. Claude on the web, Claude Desktop and Claude Code are set up above and use the same sign-in. Not yet supported: Cursor, which supports only Dynamic Client Registration. ## Sign in 1. The client calls the server with no token. The server answers `401` and points the client at Mammoth's authorization server. 2. The client opens a Mammoth consent page in your browser. Sign in to Mammoth if you are not already. 3. Choose the workspace and a project (or all projects) the client may use, and approve. 4. The client receives a token for this server and keeps it. From then on, each tool call reaches Mammoth with that token, as you. A token belongs to one workspace. A tool call for another workspace is refused. ### How long sign-in lasts - **Access tokens last one hour.** Your client refreshes them automatically, so you do not sign in again every hour. - **Refresh tokens do not expire on a timer.** Each refresh issues a new refresh token and the old one stops working, so your client must keep the newest one. - **A reused old refresh token revokes the connection.** Mammoth treats it as a possible theft. The client then has to sign in again. One exception: the token that the last refresh replaced still works once for 60 seconds, in case the response never reached the client. **Hand-made `mm_` tokens are refused.** The server accepts only tokens issued by this OAuth sign-in. An API token made in **Workspace settings → API Tokens** was issued for no server, so it does not work here. Use that token with the [REST API, the SDK or the CLI](https://mammoth.io/docs/build/auth/) instead. ## Revoke access Open **Settings → Connected apps** in the Mammoth web app and choose **Revoke** next to the client. It loses access at once, including to anything it is doing at that moment. You can connect it again from the client. ## Uploading a file A tool argument carries only text, so a spreadsheet or a large CSV cannot go through the model. `request_upload` returns a one-time link; you open it (or drop the file on the uploader some clients draw under the call) and the file goes straight from your browser to Mammoth. The link expires after 30 minutes and works for one upload. `check_upload` then reports whether the file arrived. [Blast radius and safety](https://mammoth.io/docs/agents/safety/#the-inverse-case-data-entering-mammoth-through-a-link-not-an-argument) explains why this is safe. ## The tools The server has 47 tools. Each declares what it does to your data as an MCP annotation, so a client can run a read-only tool freely and ask you before a destructive one. The list below is read from the server's tool registry. ### Tools that only read (`readOnlyHint`): 23 tools | Tool | What it does | | --- | --- | | `check_upload` | Find out whether the user has uploaded their files yet. | | `get_automation` | Get one automation: what it does, when it runs, and how it last went. | | `get_automation_schema` | Get what one kind of automation task needs, and the conditions there are. | | `get_dashboard` | Get one dashboard: its title, its views, and who it is shared with. | | `get_data` | Read rows from a view. | | `get_dataset` | Get one dataset with its columns, row counts and status. | | `get_export` | Get one export of a view, including how its last run went. | | `get_export_schema` | Get the settings one export destination needs. | | `get_file` | Get one file, with its status and what Mammoth read from it. | | `get_help` | Explain how Mammoth works. Read this before a first transformation. | | `get_pipeline` | Get a view's pipeline: its state and its steps, in order. | | `get_transformation_schema` | Get the arguments one transformation takes, as a JSON schema. | | `get_view` | Get one view with its columns and their types. | | `list_automations` | List a project's automations. | | `list_dashboard_tags` | List the tags dashboards in a workspace are filed under. | | `list_dashboards` | List the dashboards the signed-in user can open. | | `list_datasets` | List the datasets in a project. | | `list_exports` | List a view's exports. | | `list_files` | List the files uploaded to a project. | | `list_projects` | List the projects in a workspace. | | `list_views` | List the views of a dataset. | | `list_workspaces` | List the workspaces the signed-in user can open. | | `preview_transformation` | Show what a transformation would do to a sample of a view, without adding it. | ### Tools that add or change something that can be put back: 11 tools | Tool | What it does | | --- | --- | | `add_transformations` | Add transformations to a view, and run its pipeline once. | | `create_dashboard` | Create an empty dashboard on a view, and return it. | | `create_view` | Create a view of a dataset, empty or as a copy of another view. | | `extract_sheets` | Bring the chosen sheets of an uploaded workbook in, one dataset each. | | `generate_dashboard` | Have Mammoth's AI build a dashboard on a view from a description. | | `interpret_file` | Say how a file is meant to be read, when Mammoth found more than one way. | | `request_upload` | Let the user upload files from their own machine. | | `set_dashboard_tags` | File a dashboard under a set of tags, replacing the tags it had. | | `set_date_format` | Say which way round a file's dates read, and finish the dataset. | | `unlock_file` | Open a file that is password protected, so Mammoth can read it. | | `upload_file` | Create a dataset in a project from text you have. | ### Tools that delete, send data out, publish, or run work (`destructiveHint`): 13 tools | Tool | What it does | | --- | --- | | `add_export` | Add an export to a view's pipeline and wait for it to run. | | `create_automation` | Create an automation in a project and return it. | | `delete_automation` | Move an automation to the trash, where it can still be restored. | | `delete_dashboard` | Move a dashboard to the trash, where it can still be restored. | | `delete_export` | Delete one export of a view. Rows already sent are not taken back. | | `delete_file` | Delete a file from a project. | | `delete_transformation_step` | Delete one step of a view's pipeline and wait for the view to run again. | | `delete_views` | Delete views of a dataset. | | `manage_draft` | Stage a view's transformations instead of running each one as it is added. | | `publish_dashboard` | Publish a dashboard, decide who can open it, and return its link. | | `review_unreadable_rows` | Show the lines of a file that did not fit, and discard them on request. | | `run_pipeline` | Run all of a view's steps again, e.g. after its dataset got new data. | | `update_automation` | Rename an automation, or stop and start it. Returns it afterwards. | A client decides how to act on these annotations. Whether a given client asks you before a destructive tool is that client's setting. --- **Next up:** [API authentication](https://mammoth.io/docs/build/auth/) for the credential each surface uses · [Blast radius and safety](https://mammoth.io/docs/agents/safety/) for the CLI's mutation classes · [Use Mammoth with Claude](https://mammoth.io/docs/agents/claude/). --- # Mammoth CLI blast radius and safety URL: https://mammoth.io/docs/agents/safety/ · Updated: 2026-11-02 Six mutation classes and four confirmation policies. What each Mammoth command does to your data, and what it demands before it runs. This is the part of the CLI that makes it reasonable to hand to an autonomous agent. Nothing has to be inferred from a command's name: the class and the policy are declared, and `mammoth schema get ` returns them at runtime. ## The six mutation classes The class states what a command does to your data or account. Counts below are the CLI's commands on the release the [capability contract](https://mammoth.io/docs/build/) was generated from, as `mammoth schema list` reports them. | Class | What it means | Commands | | --- | --- | --- | | `read` | Reads only. Cannot change anything. | 309 | | `benign_mutation` | Changes something, but it is ordinary and reversible—create, update, rename. | 225 | | `reversible_pipeline` | Adds or edits a pipeline step. Undo by removing or editing the step. | 40 | | `external_effect` | Acts outside Mammoth—sends a message, writes to an external store or database. | 42 | | `high_impact` | Changes account-level state: membership, ownership, workspace settings. | 99 | | `destructive` | Deletes something. Recoverable only if the resource has a trash/restore path. | 66 | > **`external_effect` is not undoable** > > It acts outside Mammoth, so it does not destroy anything inside your workspace—which is why it is not marked destructive—and it cannot be taken back, which is why it is not benign either. Of the 781, 165—every `high_impact` and `destructive` command—can lose data or change your account. Filter the full list by class on [the capability contract](https://mammoth.io/docs/build/). ## The four confirmation policies The policy states what you must pass before a command runs. | Policy | How to satisfy it | | --- | --- | | `none` | Nothing required. | | `prompt_or_yes` | Pass `--yes`, or confirm at an interactive terminal. Any delete, remove, clear or discard that cannot be undone uses this. | | `yes_always` | Pass `--yes` always, even at a terminal. | | `confirm_target` | Pass `--yes` and `--confirm TARGET`, matching exactly. The CLI checks `--confirm` before any API call. | ## Behaviour without a terminal Prompts happen only when standard input is a real terminal. Under `--no-input`, in `json`/`ndjson` output, or in CI, there is no prompt. A missing `--yes` or `--confirm` fails with exit code `2` and an error code of `confirmation_required` or `confirmation_target_mismatch`. ```bash # normal delete mammoth dataset delete 2340 --project 180 --yes # high-impact: --confirm must match the workspace id exactly mammoth workspace delete --yes --confirm 9 ``` Discover a command's policy at runtime with `mammoth schema get `. ## The other safety rules - The CLI never retries a mutation without a real server idempotency contract. **Only exit code 7 is safe to retry.** - An interruption returns exit code `130` and closes sessions and files. - Secrets never appear on the command line, in logs, or in any envelope. - `--dry-run` on any API-backed command resolves parents, display names and conditions, then stops before the SDK call and reports what it would have sent (`data.would_call`, `data.dry_run: true`) along with `targets`, the named resources it would change. A dry run of a delete also lists its `dependents`, and a dry run of a row-changing step can carry `predicted_impact`. A destructive command whose targets cannot be resolved fails with `dry_run_targets_unresolvable` rather than reporting an empty list. No confirmation flag is needed for a dry run; the real run still needs its own. - Every `view transform *` and `view task add` accepts `expected_task_count`, the task count your last read returned. The CLI re-reads the pipeline right before writing and refuses with `pipeline_changed` if the count no longer matches, so a plan made against a stale read cannot land on a pipeline that changed under it. ## Where the instruction came from Every class and policy above describes what a command does. None of them describes who asked for it, and an agent reading a web page, an issue tracker or a spreadsheet is reading text somebody else wrote. - **Data an agent reads is not an instruction.** A dataset cell, a file name or a column header can contain a sentence that looks like a command. Mammoth returns it as data, and it stays data. - **Blast radius is the control that survives this.** An injected instruction still has to produce a call, and a `destructive` call still demands its confirmation. That is why the confirmation policy belongs to the command, not to the conversation. - Be careful combining Mammoth with other tools in one agent session. Content one tool returns can be aimed at another, and the more tools share a context, the more surface that has. - Credentials go through `mammoth auth login`, run by a human, never through a prompt—so no instruction an agent reads can cause it to repeat one back. See [Authenticate](https://mammoth.io/docs/agents/#authenticate). ## The inverse case: data entering Mammoth through a link, not an argument Everything above is about an agent *acting on* Mammoth. The [Mammoth MCP server](https://mammoth.io/docs/agents/mcp/) introduces the opposite direction: a tool argument only carries text, so a spreadsheet, a large CSV or anything binary cannot travel through the model at all. Its `request_upload` tool instead mints a one-time upload ticket and hands back a link; a person opens it in their own browser and drops a file on it. What makes this safe to describe in the same vocabulary as everything above: - **The link carries no Mammoth sign-in of its own.** The ticket stands in for the caller: it holds the MCP caller's own access token, sealed with the same key that guards Mammoth's other stored credentials, so a page has something to upload as without ever showing a sign-in form. - **It is single-use and short-lived.** The ticket is 256 bits of randomness—the same strength as an OAuth authorization code—good for 30 minutes, and is spent (and the caller's token dropped from the record) the moment a file is uploaded, so the link opens nothing a second time. - **The bytes never pass through the model.** They go from the browser straight to the same upload route the Mammoth web app itself uses, so size, format and every ordinary check and audit trail are the signed-in user's own, not the conversation's. - **The upload runs as the person who asked for it, with their permissions and no others.** Nothing about the ticket grants the browser broader access than the MCP caller already had. - **An expired or already-used link says so, in the browser, and offers no retry path of its own.** The agent has to ask its `request_upload` tool for a new one; there is no way to extend or replay an old link. The class this belongs to, if you extend the six above by analogy rather than by a value the server actually declares: the file landing in Mammoth is an ordinary upload—`benign_mutation` in the CLI's own vocabulary—the ticket that authorizes it is the new part. --- **Next up:** [Agents and CI](https://mammoth.io/docs/agents/ci/) for non-interactive auth and the reliable operation loop · [Capability contract](https://mammoth.io/docs/build/) to filter every command by blast radius. --- # The Mammoth agent skill URL: https://mammoth.io/docs/agents/skill/ · Updated: 2026-11-02 mammoth skill install puts a CLI playbook into your coding agent—authentication, discovery, structured input, job handling and confirmations. `mammoth skill install` copies a packaged skill—authentication, discovery, structured input, job handling and confirmations—into your coding agent's own skills directory, so it reads the playbook once rather than re-deriving CLI conventions from trial and error. ```bash mammoth skill install mammoth skill list ``` ## What it contains The skill ships as one `SKILL.md` entry point plus a `references/` directory the entry point routes into by task, rather than one long document read in full every time. Top-level references: - `about-mammoth.md`—what Mammoth is, its data model, and which command does a goal stated in business terms ("combine these files"), including each web-app Transform-menu task - `auth.md`—signing in, profiles, and authorized scope - `capabilities.md` and `capabilities-misc.md`—which routes are proven, known-blocked or untried on the release endpoint - `command-index.md`—a lookup for one exact command, not upfront reading - `handoff.md`—the checklist for pausing or transferring work to another agent - `input.md`—nested input documents and how to shape a request - `jobs-drafts.md`—waiting on asynchronous work and draft-mode pipelines - `machine-output.md`—the envelope shape, in full - `operations.md`—which id is which, appending rows, and other one-off rules - `recovery.md`—failure modes by message, and the stop-condition list - `report-checklist.md`—what to verify before stating a number or calling a step done - `retention.md`—deliverable retention and cleanup authorization - `safety.md`—confirmation policies and how to satisfy each one non-interactively - `task-start.md`—cold start, task planning, and what to do when a route is unsupported Plus two subdirectories: `commands/` (one file per command family, e.g. `view.md`, `dashboard.md`, `automation.md`) and `recipes/` (worked flows: `end-to-end.md`, `transforms.md`, `exports.md`, `dashboards.md`, `scheduling.md`, `database-import.md`, `cleanup.md`, `auth-scope.md`, `resources.md`, `need-action.md`, `typed-etl-discovery.md`, and an `index.md` routing between them). ## What it gives the agent - How to authenticate without a terminal, and—just as important—when *not* to: the skill tells an agent to hand `mammoth auth login` to the human operator rather than run it, or ask for a key in chat, itself. - How to discover a command's request shape with `mammoth schema get`, rather than guessing it from a `--help` string. - How to pass structured input as one `--input` document instead of many flags. - How to wait on jobs and navigate draft-mode pipelines. - How confirmations work, and which commands demand which of them—see [blast radius and safety](https://mammoth.io/docs/agents/safety/). It is the same material as [the agents section](https://mammoth.io/docs/agents/) as a whole, delivered where the agent will actually read it: inside its own skills directory, at the start of a session. ## Choosing targets and scope The installer knows three agents—Codex, Claude Code and Cursor—and two scopes. The default is user scope, across all three: | Agent | Default destination (user scope) | | --- | --- | | Claude Code | `~/.claude/skills/mammoth-cli/` | | Codex | `~/.agents/skills/mammoth-cli/` | | Cursor | `~/.cursor/skills/mammoth-cli/` | Project scope installs into the same relative paths under the nearest directory containing a `.git` folder instead of the home directory. Review the destinations before a project-scoped install, and target one agent at a time if you do not want all three: ```bash mammoth skill path --output json --no-input # show source + every computed target mammoth skill install --input '{"agents": ["codex"], "scope": "project"}' ``` `mammoth skill show` prints the bundled `SKILL.md`, or one reference file by path, without installing anything—useful for reading the playbook before deciding to install it: ```bash mammoth skill show mammoth skill show --input '{"file": "references/recipes/end-to-end.md"}' ``` There is also `mammoth skill agents-md install`, which writes (or refreshes) a short steering block into a repository's `AGENTS.md` pointing back at this skill, so a later session in the same repository starts here without re-running the installer. ## Keeping it current Run `mammoth skill update` after a CLI upgrade. It refreshes copies the installer owns and reports modified copies instead of silently overwriting them, so local edits are never clobbered without telling you: ```bash mammoth skill list # are installed copies present and intact? mammoth skill update # refresh the ones the installer owns ``` `mammoth skill uninstall` removes installer-owned destinations; a copy you modified by hand is left in place rather than deleted. ## Looking for MCP? The skill is the CLI's own agent interface. For an MCP client that acts on a workspace, use the [Mammoth MCP server](https://mammoth.io/docs/agents/mcp/). To look up Mammoth documentation from Claude, connect the documentation MCP server: see [Use Mammoth with Claude](https://mammoth.io/docs/agents/claude/). --- **Next up:** [For coding agents](https://mammoth.io/docs/agents/) for install, credentials and the operation loop · [Blast radius and safety](https://mammoth.io/docs/agents/safety/) for what each command demands before it runs. --- # Mammoth API authentication URL: https://mammoth.io/docs/build/auth/ · Updated: 2026-11-02 Authenticate against the Mammoth API with an API token sent as a Bearer header. Base URL, credential storage, and how to sign in without a terminal. Scripts, the REST API and the SDK use an API token, sent as `Authorization: Bearer mm_...`. MCP clients and the CLI's browser sign-in use OAuth instead. Browser sessions use JWTs, which are not available to an integration. ## Which credential for which surface | You are using | Credential | How you get it | | --- | --- | --- | | REST API, `mammoth-io` SDK, scripts and CI | `mm_` API token, sent as a Bearer header | **Workspace settings → API Tokens → Create token**, described below | | The `mammoth` CLI, on your own machine | A browser sign-in, or a device code on a machine with no browser | `mammoth auth login --method oauth`, or `mammoth auth login --method device` | | The CLI in CI or any unattended run | The same `mm_` API token | `mammoth auth login --method token`, or `--input creds.json` | | The Mammoth MCP server, `https://mcp.mammoth.io/mcp` | OAuth, through your MCP client | The client opens a Mammoth consent page. See [Mammoth MCP server](https://mammoth.io/docs/agents/mcp/) | A token made by hand in Workspace settings does not work against the MCP server: the server accepts only tokens issued by the OAuth sign-in. See [the OpenAPI document](https://app.mammoth.io/api/v2/docs/openapi.json) for the full REST reference. > **Keep credentials out of your code** > > For the SDK and curl, keep the token in an environment variable: never in a prompt, a script, or a file in the repository. The CLI does not read environment variables at all. ## Sign in to the CLI without a token `mammoth auth login` asks how to sign in, or you pass the method: | Command | What happens | | --- | --- | | `mammoth auth login --method oauth` | Opens your browser to Mammoth's consent page. The CLI stores a short-lived token and refreshes it for you. `--no-browser` prints the sign-in URL instead of opening it. | | `mammoth auth login --method device` (or `--device`) | For a machine with no browser. The CLI prints a short code and a URL; you approve on any other device and the CLI waits. | | `mammoth auth login --method token` | Prompts for an `mm_` API token with hidden input. | `mammoth auth logout` signs out and also revokes the connection on the server. OAuth access tokens last one hour, and the CLI refreshes them for you. Refresh tokens rotate on every use and have no expiry of their own. See [how long sign-in lasts](https://mammoth.io/docs/agents/mcp/#how-long-sign-in-lasts) for the details. ## Connected apps and revoking access When you sign in to an MCP client or to the CLI with OAuth, Mammoth shows a consent page. You choose the workspace and a project (or all projects) and approve. The app can then read and change data in that scope as you, the same as an API token, and cannot read your other workspaces. To remove access, open **Settings → Connected apps** in the web app and choose **Revoke** next to the app. It loses access at once, including for anything it is doing at that moment. You can connect it again from the app. ## Get your credentials You need one value: an **API token**. 1. Open the Mammoth web app. 2. Go to **Workspace settings → API Tokens** and choose **Create token**. 3. **Copy the token immediately**: it starts with `mm_` and is shown once. If you lose it, create a new one. A token works only in the workspace and on the server where you created it, and it names that workspace itself. Neither the SDK nor the CLI asks you for a workspace id. You need the id only to write a REST URL such as `/workspaces/{id}/projects`: it is the number after `/workspaces/` in the web app's address bar. > **Project-limited tokens** > > A token can be limited to one project when you create it. It then gets HTTP 403 in every other project, including a project it created. Create the token without a project if your code creates or switches projects. > **API access works the same on every plan** > > A token behaves identically regardless of which plan you're on. What changes with the plan is what sits behind the token: storage, how many builders you have, and how often data refreshes. A workspace with a token has the same limits it has in the browser. ## Base URL ``` https://app.mammoth.io/api/v2 ``` `app` is the default server prefix and names your region. If your Mammoth runs on a different prefix, substitute it: `https://.mammoth.io/api/v2`. ## Headers Every request carries one header. | Header | Value | | --- | --- | | `Authorization` | `Bearer mm_...`, your API token | A token belongs to one workspace, so you don't send a workspace header with it. If a request does name a workspace (an `X-WORKSPACE-ID` header, or the workspace id in the URL path), it must be the token's own workspace, or the API returns 401. Only the deprecated key and secret headers require `X-WORKSPACE-ID`. > **X-API-KEY and X-API-SECRET are deprecated** > > The API still accepts the older key and secret headers, but new tokens have no secret. Use the Bearer token for anything new. **curl** ```bash curl https://app.mammoth.io/api/v2/workspaces/$MAMMOTH_WORKSPACE_ID/projects \ -H "Authorization: Bearer $MAMMOTH_API_TOKEN" ``` **mammoth-io** ```python import asyncio import os from mammoth import MammothClient async def main(): async with MammothClient( api_token=os.environ["MAMMOTH_API_TOKEN"], ) as client: client.set_project_id(10) await client.projects.list() asyncio.run(main()) ``` **CLI** ```bash mammoth auth login # prompts for the token; the workspace comes from the token # No terminal (agents, CI): mammoth auth login --input creds.json --storage file --output json --no-input ``` The SDK and the CLI add this header for you. The SDK is async (see [Python SDK](https://mammoth.io/docs/build/sdk/)). It takes only the token, because a token names its own workspace; passing `workspace_id` with a token is an error. Most operations also need a project; set it with `client.set_project_id(…)`. ## Keep credentials out of your code For the SDK and curl, use environment variables. Never hard-code a token, never put one in a prompt, and never commit one. ```bash export MAMMOTH_API_TOKEN="mm_" export MAMMOTH_WORKSPACE_ID="" # only for REST URLs, as in the curl example ``` For agents and CI, which cannot answer hidden prompts, sign in from an owner-only file outside the repository: **`creds.json`** ```json { "api_token": "mm_", "server_prefix": "app" } ``` `api_token` is required. `server_prefix` is optional and defaults to `app`. The file takes no other field; a `workspace_id` in it is rejected. Create the file owner-only (`0600`) from the start, for example from your CI secret store; don't write it first and `chmod` it afterwards, because another process may already have read it. The CLI refuses a group- or world-readable file. ```bash mammoth auth login --input creds.json --storage file --output json --no-input ``` `--storage file` is explicit because `--storage auto`, the default, picks the OS keyring and fails in a process that has none. To target a different region, pass `--server-prefix LABEL`. Delete the file once the credentials are stored. > **The CLI has no environment-variable shortcut** > > `MAMMOTH_API_TOKEN` is how the **Python SDK** gets its token, because you pass it to the client yourself. The **CLI** never reads it: it uses the credentials you stored above, from the keyring or from a credentials file. ## Finding ids from a URL The SDK can pull ids straight out of an app URL. ```python from mammoth import parse_path ids = parse_path("https://app.mammoth.io/#/workspaces/11/projects/10/views/1039") # {"workspace_id": 11, "project_id": 10, "dataview_id": 1039} ``` ## When authentication fails A bad or missing credential returns **HTTP 401**. The SDK raises `MammothAuthError`; the CLI exits with code **4**. > **Not retryable** > > Neither is worth retrying. Re-check the token instead. A project-limited token gets HTTP 403, not 401, outside its project. The CLI shows such a token only its own project: `project list` lists that one project, and `project get OTHER_ID` is refused locally with `authorization_required`. The only CLI exit code worth a retry is `7`. ## Next up - [Quickstart](https://mammoth.io/docs/build/quickstart/): your first real call, three ways. - [Command contract](https://mammoth.io/docs/build/): everything you can do, with its blast radius. --- # mammoth activity URL: https://mammoth.io/docs/build/cli/activity/ · Updated: 2026-11-02 All 2 mammoth activity commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 2 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth activity export` | `profile` | Read | `none` | — | `returns_job` | `none` | `mammoth.api.activity_logs.ActivityLogsAPI.export` | `POST /workspaces/{workspace_id}/activity_log/export` (ExportActivityLogs) | | `mammoth activity list` | `profile` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.activity_logs.ActivityLogsAPI.list` | `POST /workspaces/{workspace_id}/activity_log` (GetActivityLogs) | --- # mammoth addon URL: https://mammoth.io/docs/build/cli/addon/ · Updated: 2026-11-02 All 6 mammoth addon commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 6 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth addon connector add` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.add_connector` | `POST /workspaces/{workspace_id}/addons/connectors` (AddConnectorAddon) | | `mammoth addon connector remove` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.remove_connector` | `DELETE /workspaces/{workspace_id}/addons/connectors` (RemoveConnectorAddon) | | `mammoth addon storage add` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.add_storage` | `POST /workspaces/{workspace_id}/addons/storage` (AddStorageAddon) | | `mammoth addon storage remove` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.remove_storage` | `DELETE /workspaces/{workspace_id}/addons/storage` (RemoveStorageAddon) | | `mammoth addon user add` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.add_users` | `POST /workspaces/{workspace_id}/addons/users` (AddUserSeatsAddon) | | `mammoth addon user remove` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.remove_users` | `DELETE /workspaces/{workspace_id}/addons/users` (RemoveUserSeatsAddon) | --- # mammoth agent URL: https://mammoth.io/docs/build/cli/agent/ · Updated: 2026-11-02 All 44 mammoth agent commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 44 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth agent access grant revoke` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_grant_revoke` | `DELETE /agents/access/grants/{grant_id}` (RevokeAgentAccess) | | `mammoth agent access request resolve` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_request_resolve` | `PATCH /agents/access/requests/{request_id}` (ResolveAgentAccessRequest) | | `mammoth agent action delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.action_delete` | `DELETE /agents/sessions/{session_id}/actions/{action_id}` (DeleteAgentSessionAction) | | `mammoth agent session delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.session_delete` | `DELETE /agents/sessions/{session_id}` (DeleteAgentSession) | ## High impact | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth agent access settings update` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_settings_update` | `PATCH /agents/access/settings` (UpdateAgentSettings) | ## External effect | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth agent access grant give` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_grant_give` | `POST /agents/access/grants` (GiveAgentAccess) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth agent access chart save` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_chart_save` | `POST /agents/access/saved-charts` (SaveAgentChart) | | `mammoth agent access grant update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_grant_update` | `PATCH /agents/access/grants/{grant_id}` (ChangeAgentAccess) | | `mammoth agent access request add-to-context` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_request_add_to_context` | `POST /agents/access/requests/{request_id}/project-context` (AddAgentRequestToProjectContext) | | `mammoth agent access request create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_request_create` | `POST /agents/access/requests` (CreateAgentAccessRequest) | | `mammoth agent chat` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.chat` | `POST /agents/chat` (AgentChat) | | `mammoth agent message set-request-kind` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.message_set_request_kind` | `PATCH /agents/sessions/{session_id}/messages/{message_id}/request-kind` (CorrectAgentRequestKind) | | `mammoth agent plan approve` | `profile` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth agent plan discard` | `profile` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth agent plan edit-proposal` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.plan_edit_proposal` | `PATCH /agents/sessions/{session_id}/plan/proposal` (EditAgentPlanProposal) | | `mammoth agent plan skip` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth agent run extend` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_extend` | `POST /agents/sessions/{session_id}/runs/{run_id}/extend` (ExtendAgentRun) | | `mammoth agent run pause` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_pause` | `POST /agents/sessions/{session_id}/runs/{run_id}/pause` (PauseAgentRun) | | `mammoth agent run resume` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_resume` | `POST /agents/sessions/{session_id}/runs/{run_id}/resume` (ResumeAgentRun) | | `mammoth agent run retry` | `profile` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_retry` | `POST /agents/sessions/{session_id}/runs/{run_id}/retry` (RetryAgentRun) | | `mammoth agent run stop` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_stop` | `POST /agents/sessions/{session_id}/runs/{run_id}/stop` (StopAgentRun) | | `mammoth agent run units set` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_units_set` | `POST /agents/sessions/{session_id}/runs/{run_id}/units` (RegisterAgentRunUnits) | | `mammoth agent session set-visibility` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.session_set_visibility` | `PATCH /agents/sessions/{session_id}` (SetAgentSessionVisibility) | | `mammoth agent turn cancel` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.turn_cancel` | `POST /agents/sessions/{session_id}/turns/{turn_id}/cancel` (CancelAgentTurn) | | `mammoth agent turn rate` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.turn_rate` | `POST /agents/sessions/{session_id}/turns/{turn_id}/feedback` (RateAgentTurn) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth agent access askers` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_project_askers` | `GET /agents/access/projects/{project_id}/askers` (GetAgentProjectAskers) | | `mammoth agent access grant list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_grants_list` | `GET /agents/access/grants` (ListAgentGrants) | | `mammoth agent access me` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_me` | `GET /agents/access/me` (GetAgentAccessMe) | | `mammoth agent access people` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_people` | `GET /agents/access/people` (ListAgentPeople) | | `mammoth agent access reach` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_reach` | `GET /agents/access/reach` (GetAgentAccessReach) | | `mammoth agent access request list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_requests_list` | `GET /agents/access/requests` (ListAgentAccessRequests) | | `mammoth agent access request mine` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_requests_mine` | `GET /agents/access/requests/mine` (ListMyAgentAccessRequests) | | `mammoth agent access settings get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_settings_get` | `GET /agents/access/settings` (GetAgentSettings) | | `mammoth agent access tree` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_tree` | `GET /agents/access/tree` (GetAgentAccessTree) | | `mammoth agent action list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.action_list` | `GET /agents/sessions/{session_id}/actions` (ListAgentSessionActions) | | `mammoth agent run instance list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_instances_list` | `GET /agents/sessions/{session_id}/runs/{run_id}/instances` (ListAgentRunInstances) | | `mammoth agent run instance messages` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_instance_messages` | `GET /agents/sessions/{session_id}/runs/{run_id}/instances/{instance_id}/messages` (ListAgentInstanceMessages) | | `mammoth agent run instance transcript` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_instance_transcript` | `GET /agents/sessions/{session_id}/runs/{run_id}/instances/{instance_id}/transcript` (GetAgentInstanceTranscript) | | `mammoth agent run list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_list` | `GET /agents/sessions/{session_id}/runs` (ListAgentSessionRuns) | | `mammoth agent run status` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_status` | `GET /agents/sessions/{session_id}/run` (GetAgentSessionRun) | | `mammoth agent run units list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_units_list` | `GET /agents/sessions/{session_id}/runs/{run_id}/units` (ListAgentRunUnits) | | `mammoth agent session feedback list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.turn_feedback_list` | `GET /agents/sessions/{session_id}/feedback` (ListAgentTurnFeedback) | | `mammoth agent session list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.agents.AgentsAPI.session_list` | `GET /agents/sessions` (ListAgentSessions) | | `mammoth agent session messages` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.session_messages` | `GET /agents/sessions/{session_id}/messages` (GetAgentSessionMessages) | --- # mammoth ai URL: https://mammoth.io/docs/build/cli/ai/ · Updated: 2026-11-02 All 5 mammoth ai commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 5 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth ai retention condition` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | `mammoth.api.ai.AIAPI.retention_condition` | `POST /workspaces/{workspace_id}/projects/{project_id}/sql_generation/retention_policy` (RetentionCondition) | | `mammoth ai condition generate` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.ai.AIAPI.condition_generate` | `POST /workspaces/{workspace_id}/projects/{project_id}/sql_generation/condition` (GenerateCondition) | | `mammoth ai expression generate` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.ai.AIAPI.expression_generate` | `POST /workspaces/{workspace_id}/projects/{project_id}/sql_generation/expression` (GenerateExpression) | | `mammoth ai sql generate` | `profile` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.generate_sql` | `POST /workspaces/{workspace_id}/projects/{project_id}/sql_generation` (GenerateSql) | | `mammoth ai suggestion list` | `profile` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.get_suggestions` | `POST /workspaces/{workspace_id}/projects/{project_id}/suggestions` (AiSuggestions) | --- # mammoth annotation URL: https://mammoth.io/docs/build/cli/annotation/ · Updated: 2026-11-02 All 5 mammoth annotation commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 5 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth annotation delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.annotations.AnnotationsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/annotations/{annotation_id}` (DeleteAnnotation) | | `mammoth annotation comment add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.annotations.AnnotationsAPI.comment_add` | `POST /workspaces/{workspace_id}/projects/{project_id}/annotations/{annotation_id}/comments` (AddComment) | | `mammoth annotation create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.annotations.AnnotationsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/annotations` (CreateAnnotation) | | `mammoth annotation update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.annotations.AnnotationsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/annotations/{annotation_id}` (PatchAnnotation) | | `mammoth annotation list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.annotations.AnnotationsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/annotations` (ListAnnotations) | --- # mammoth auth URL: https://mammoth.io/docs/build/cli/auth/ · Updated: 2026-11-02 All 5 mammoth auth commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 5 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth auth connected-apps revoke` | `local` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.revoke_connected_app` | `DELETE /self/oauth-grants/{oauth_grant_id}` (RevokeConnectedApp) | | `mammoth auth login` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth auth logout` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth auth connected-apps list` | `local` | Read | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.connected_apps` | `GET /self/oauth-grants` (ListConnectedApps) | | `mammoth auth status` | `local` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth automation URL: https://mammoth.io/docs/build/cli/automation/ · Updated: 2026-11-02 All 13 mammoth automation commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 13 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth automation delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}` (DeleteAutomation) | ## External effect | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth automation create` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations` (CreateAutomation) | | `mammoth automation update` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}` (UpdateAutomation) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth automation restore` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.restore` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}/restore` (RestoreAutomation) | | `mammoth automation route order` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.set_route_order` | `PUT /workspaces/{workspace_id}/projects/{project_id}/automations/route-order` (SetRouteOrder) | | `mammoth automation run-file add-anyway` | `project` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.add_run_file_anyway` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations/run-files/{run_file_id}/add-anyway` (AddRunFileAnyway) | | `mammoth automation trash` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.trash` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}/trash` (TrashAutomation) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth automation capabilities` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.capabilities` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations/capabilities` (GetAutomationCapabilities) | | `mammoth automation folders` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.watched_folders` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations/folders` (GetWatchedFolders) | | `mammoth automation get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}` (GetAutomation) | | `mammoth automation list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.automations.AutomationsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations` (GetList) | | `mammoth automation route preview` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.preview_routes` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations/route-preview` (PreviewRoutes) | | `mammoth automation runs` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.runs` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}/runs` (GetAutomationRuns) | --- # mammoth batch URL: https://mammoth.io/docs/build/cli/batch/ · Updated: 2026-11-02 All 7 mammoth batch commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 7 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth batch bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.batches.BatchesAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches` (DeleteBatches) | | `mammoth batch delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `returns_job` | `none` | `mammoth.api.batches.BatchesAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches/{batch_id}` (DeleteBatch) | | `mammoth batch create` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | `mammoth.api.batches.BatchesAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches` (CreateBatch) | | `mammoth batch create-spec` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | — | — | | `mammoth batch update` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | `mammoth.api.batches.BatchesAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches` (UpdateBatches) | | `mammoth batch get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.batches.BatchesAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches/{batch_id}` (GetBatch) | | `mammoth batch list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.batches.BatchesAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches` (GetBatches) | --- # mammoth billing URL: https://mammoth.io/docs/build/cli/billing/ · Updated: 2026-11-02 All 27 mammoth billing commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 27 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth billing stripe held-change cancel` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_held_change_cancel` | `POST /workspaces/{workspace_id}/subscription/held-change/cancel` (CancelHeldChange) | ## High impact | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth billing hosted-page` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.hosted_page` | `POST /workspaces/{workspace_id}/subscription_v1/hosted-page` (FetchHostedPage) | | `mammoth billing invoice charge` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.invoice_charge` | `POST /workspaces/{workspace_id}/invoices/charge` (ChargeWorkspaceInvoices) | | `mammoth billing stripe cancel` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_cancel` | `POST /workspaces/{workspace_id}/subscription/cancel` (CancelWorkspaceSubscription) | | `mammoth billing stripe checkout-url` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_checkout_url` | `POST /workspaces/{workspace_id}/subscription/create-checkout` (CreateCheckoutUrl) | | `mammoth billing stripe create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_create` | `POST /workspaces/{workspace_id}/subscription` (CreateWorkspaceSubscription) | | `mammoth billing stripe end-trial` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_end_trial` | `POST /workspaces/{workspace_id}/subscription/end-trial` (EndTrialAndStartSubscription) | | `mammoth billing stripe payment-method delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_payment_method_delete` | `DELETE /workspaces/{workspace_id}/subscription/payment-methods/{payment_method_id}` (DeletePaymentMethod) | | `mammoth billing stripe payment-method set-default` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_payment_method_set_default` | `POST /workspaces/{workspace_id}/subscription/payment-methods/default` (SetDefaultPaymentMethod) | | `mammoth billing stripe portal-url` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_portal_url` | `POST /workspaces/{workspace_id}/subscription/customer-portal` (CreateCustomerPortalUrl) | | `mammoth billing stripe resume` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_resume` | `POST /workspaces/{workspace_id}/subscription/resume` (ResumeWorkspaceSubscription) | | `mammoth billing stripe retry-payment` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_retry_payment` | `POST /workspaces/{workspace_id}/subscription/retry-payment` (RetryPayment) | | `mammoth billing stripe storage set` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_storage_update` | `PUT /workspaces/{workspace_id}/subscription/storage` (UpdateSubscriptionStorage) | | `mammoth billing stripe sync` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_sync` | `POST /workspaces/{workspace_id}/subscription/sync` (SyncSubscription) | | `mammoth billing subscription update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.subscription_update` | `PATCH /workspaces/{workspace_id}/subscription_v1` (UpdateSubscriptionDetail) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth billing stripe recheck-limits` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_recheck_limits` | `POST /workspaces/{workspace_id}/subscription/recheck-limits` (RecheckWorkspaceLimits) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth billing chargebee-plan` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.chargebee_plan` | `GET /workspaces/{workspace_id}/chargebee-plan` (GetChargebeePlan) | | `mammoth billing invoice list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | — | — | | `mammoth billing stripe get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_get` | `GET /workspaces/{workspace_id}/subscription` (GetWorkspaceSubscription) | | `mammoth billing stripe held-change get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_held_change_get` | `GET /workspaces/{workspace_id}/subscription/held-change` (GetHeldChange) | | `mammoth billing stripe history` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_history` | `GET /workspaces/{workspace_id}/subscription/billing-history` (GetWorkspaceBillingHistory) | | `mammoth billing stripe payment-method list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.billing.BillingAPI.stripe_payment_method_list` | `GET /workspaces/{workspace_id}/subscription/payment-methods` (GetPaymentMethods) | | `mammoth billing stripe preview-invoice` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_preview_invoice` | `GET /workspaces/{workspace_id}/subscription/preview-invoice` (PreviewInvoice) | | `mammoth billing stripe status` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_status` | `GET /workspaces/{workspace_id}/subscription/status` (GetWorkspaceSubscriptionStatus) | | `mammoth billing stripe upcoming-invoice` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_upcoming_invoice` | `GET /workspaces/{workspace_id}/subscription/upcoming-invoice` (GetUpcomingInvoice) | | `mammoth billing stripe usage` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_usage` | `GET /workspaces/{workspace_id}/subscription/usage` (GetWorkspaceUsage) | | `mammoth billing subscription get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.subscription_get` | `GET /workspaces/{workspace_id}/subscription_v1` (GetWkspSubscriptionDetail) | --- # mammoth browse URL: https://mammoth.io/docs/build/cli/browse/ · Updated: 2026-11-02 All 9 mammoth browse commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 9 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth browse ancestors` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.browse.BrowseAPI.resource_ancestors` | `GET /workspaces/{workspace_id}/projects/{project_id}/resources/ancestors` (GetResourceAncestors) | | `mammoth browse folder` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.browse.BrowseAPI.folder_resources` | `GET /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}/browse` (BrowseFolderFolders) | | `mammoth browse project` | `profile` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.projects.ProjectsAPI.browse` | `GET /workspaces/{workspace_id}/projects/{project_id}/browse` (BrowseProjectProjects) | | `mammoth browse resource` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.browse.BrowseAPI.resource_get` | `GET /workspaces/{workspace_id}/projects/{project_id}/resources/{resource_type}/{object_id}` (GetResource) | | `mammoth browse resources` | `profile` | Read | `none` | — | `not_async` | `cursor` | `mammoth.api.browse.BrowseAPI.resources_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/resources` (ListResources) | | `mammoth browse resources bulk` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.browse.BrowseAPI.resources_bulk` | `POST /workspaces/{workspace_id}/projects/{project_id}/resources/bulk` (BulkGetResources) | | `mammoth browse root` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.browse.BrowseAPI.root` | `GET /browse` (BrowseResources) | | `mammoth browse search` | `profile` | Read | `none` | — | `not_async` | `cursor` | `mammoth.api.browse.BrowseAPI.resources_search` | `GET /workspaces/{workspace_id}/resources` (SearchResources) | | `mammoth browse workspace` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.browse.BrowseAPI.workspace_resources` | `GET /workspaces/{workspace_id}/browse` (BrowseWorkspaceWorkspaces) | --- # mammoth capability URL: https://mammoth.io/docs/build/cli/capability/ · Updated: 2026-11-02 All 3 mammoth capability commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 3 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth capability find` | `local` | Read | `none` | — | `not_async` | `offset` | — | — | | `mammoth capability get` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth capability list` | `local` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth client-app URL: https://mammoth.io/docs/build/cli/client-app/ · Updated: 2026-11-02 All 5 mammoth client-app commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 5 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth client-app delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.clientapps.ClientAppsAPI.delete` | `DELETE /workspaces/{workspace_id}/clientapps/{client_key}` (DeleteApp) | | `mammoth client-app create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.clientapps.ClientAppsAPI.create` | `POST /workspaces/{workspace_id}/clientapps` (CreateApp) | | `mammoth client-app update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.clientapps.ClientAppsAPI.update` | `PATCH /workspaces/{workspace_id}/clientapps/{client_key}` (UpdateApp) | | `mammoth client-app get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.clientapps.ClientAppsAPI.get` | `GET /workspaces/{workspace_id}/clientapps/{client_key}` (AppDetails) | | `mammoth client-app list` | `workspace` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.clientapps.ClientAppsAPI.list` | `GET /workspaces/{workspace_id}/clientapps` (ListApps) | --- # mammoth collection URL: https://mammoth.io/docs/build/cli/collection/ · Updated: 2026-11-02 All 21 mammoth collection commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 21 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth collection dashboards remove` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.remove_dashboard` | `DELETE /collections/{collection_id}/dashboards/{dashboard_id}` (RemoveDashboard) | | `mammoth collection delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.delete` | `DELETE /collections/{collection_id}` (DeleteCollection) | | `mammoth collection members remove` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.remove_member` | `DELETE /collections/{collection_id}/members` (RemoveMember) | ## External effect | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth collection dashboards add` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.add_dashboards` | `POST /collections/{collection_id}/dashboards` (AddDashboards) | | `mammoth collection email-updates set` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.set_email_updates` | `PUT /collections/{collection_id}/email-updates` (SaveCollectionEmailUpdates) | | `mammoth collection email-updates test` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.send_test_email_update` | `POST /collections/{collection_id}/email-updates/test` (TestCollectionEmailUpdate) | | `mammoth collection share` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.share` | `POST /collections/{collection_id}/share` (ShareCollection) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth collection create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.create` | `POST /collections` (CreateCollection) | | `mammoth collection email-updates me set` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.set_my_email_updates` | `PUT /collections/{collection_id}/email-updates/me` (SetMyCollectionEmailUpdates) | | `mammoth collection files upload` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.upload_files` | `POST /collections/{collection_id}/files` (UploadFile) | | `mammoth collection update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.update` | `PATCH /collections/{collection_id}` (UpdateCollection) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth collection active-job` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.active_job` | `GET /collections/{collection_id}/active-job` (ActiveJob) | | `mammoth collection activity` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.activity` | `GET /collections/{collection_id}/activity` (CollectionActivity) | | `mammoth collection email-updates get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.email_updates` | `GET /collections/{collection_id}/email-updates` (GetCollectionEmailUpdates) | | `mammoth collection email-updates me get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.my_email_updates` | `GET /collections/{collection_id}/email-updates/me` (GetMyCollectionEmailUpdates) | | `mammoth collection for-dashboard` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.for_dashboard` | `GET /collections/for-dashboard/{dashboard_id}` (CollectionsForDashboard) | | `mammoth collection get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.get` | `GET /collections/{collection_id}` (GetCollection) | | `mammoth collection get-by-url` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.get_by_url` | `GET /collections/url/{url}` (GetCollectionByUrl) | | `mammoth collection job` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.job` | `GET /collections/{collection_id}/jobs/{job_id}` (GetRefreshJob) | | `mammoth collection list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.list` | `GET /collections` (ListCollections) | | `mammoth collection pipeline-changes` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.pipeline_changes` | `GET /collections/{collection_id}/pipeline-changes` (PipelineChanges) | --- # mammoth completion URL: https://mammoth.io/docs/build/cli/completion/ · Updated: 2026-11-02 All 2 mammoth completion commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 2 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth completion install` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth completion show` | `local` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth config URL: https://mammoth.io/docs/build/cli/config/ · Updated: 2026-11-02 All 4 mammoth config commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 4 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth config set` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth config get` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth config list` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth config path` | `local` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth connector URL: https://mammoth.io/docs/build/cli/connector/ · Updated: 2026-11-02 All 40 mammoth connector commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 40 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth connector connection delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.delete_connection` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}` (DeleteConnection) | | `mammoth connector draft discard` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.discard` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}` (DiscardConnectorDraft) | | `mammoth connector ds-config delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.delete_ds_config` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs/{ds_config_key}` (DeleteDsConfig) | | `mammoth connector ds-config delete-all` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.ds_config_delete_all` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs` (DeleteDsConfigs) | ## External effect | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth connector connection create` | `workspace` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.create_connection` | `POST /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections` (SaveConnection) | | `mammoth connector connection update` | `workspace` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.update_connection` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}` (UpdateConnection) | | `mammoth connector ds-config create` | `workspace` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.create_ds_config` | `POST /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs` (ValidateAndGetDsConfig) | | `mammoth connector ds-config update` | `workspace` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.update_ds_config` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs/{ds_config_key}` (UpdateDsConfigs) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth connector ai chat` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.chat` | `POST /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat` (Chat) | | `mammoth connector ai submit-column-selection` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.submit_column_selection` | `POST /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/column-selection` (SubmitColumnSelection) | | `mammoth connector ai submit-credentials` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.submit_credentials` | `POST /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/credentials` (SubmitCredentials) | | `mammoth connector connection test` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.test_connection` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/connections/{connection_key}/test` (TestConnection) | | `mammoth connector draft create` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts` (CreateConnectorDraft) | | `mammoth connector draft fill` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.fill` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/fill` (FillConnectorDraftGap) | | `mammoth connector draft open` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.open` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/open` (OpenConnectorDraftEntry) | | `mammoth connector draft read-tables` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.read_tables` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/read-tables` (ReadConnectorDraftTables) | | `mammoth connector draft sample` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.sample` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/sample` (ShapeConnectorDraftFromSample) | | `mammoth connector draft save` | `workspace` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.save` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/save` (StartConnectorDraftSave) | | `mammoth connector draft source preview` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.preview_source` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/sources/{source_id}/preview` (PreviewConnectorDraftSource) | | `mammoth connector draft update` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}` (PatchConnectorDraft) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth connector active` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.active_connectors` | `GET /workspaces/{workspace_id}/active_connectors` (GetActiveConnectors) | | `mammoth connector ai history` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.history` | `GET /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/history` (GetChatHistory) | | `mammoth connector ai session list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connector_ai.ConnectorAIAPI.session_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/sessions` (ListSessions) | | `mammoth connector ai session messages` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.session_messages` | `GET /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/sessions/{session_id}/messages` (GetSessionMessages) | | `mammoth connector connection get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.get_connection` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}` (GetConnection) | | `mammoth connector connection list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.list_connections` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections` (ListConnections) | | `mammoth connector connection list-all` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.list_all_connections` | `GET /workspaces/{workspace_id}/projects/{project_id}/connections` (ListAllConnections) | | `mammoth connector connection query` | `workspace` | Read | `none` | — | `not_async` | `single_page` | — | — | | `mammoth connector draft browse` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.browse` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/browse` (BrowseConnectorDraftFolderConnectorDrafts) | | `mammoth connector draft get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}` (GetConnectorDraft) | | `mammoth connector draft known-sources` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.known_sources` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/known-sources` (ListConnectorKnownSources) | | `mammoth connector draft list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts` (ListConnectorDrafts) | | `mammoth connector draft source join-candidates` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.join_candidates` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/sources/{source_id}/join-candidates` (ListConnectorDraftJoinCandidates) | | `mammoth connector draft source list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.sources` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/sources` (ListConnectorDraftSources) | | `mammoth connector ds-config get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.get_ds_config` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs/{ds_config_key}` (GetDsConfig) | | `mammoth connector ds-config list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.list_ds_configs` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs` (ListDsConfigs) | | `mammoth connector get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.get` | `GET /workspaces/{workspace_id}/connectors/{connector_key}` (GetConnector) | | `mammoth connector list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.list` | `GET /workspaces/{workspace_id}/connectors` (ListWorkspaceConnectors) | | `mammoth connector query generate` | `workspace` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.query_gen` | `POST /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/chat` (GetQuerySuggestion) | | `mammoth connector query status` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.ai.AIAPI.status` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/chat` (GetChatStatus) | --- # mammoth context URL: https://mammoth.io/docs/build/cli/context/ · Updated: 2026-11-02 All 4 mammoth context commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 4 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth context project clear` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth context project use` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth context project status` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth context show` | `local` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth dashboard URL: https://mammoth.io/docs/build/cli/dashboard/ · Updated: 2026-11-02 All 167 mammoth dashboard commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 167 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dashboard chart-type delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chart_type_delete` | `DELETE /dashboards/v3/chart-types/{chart_type_id}` (DeleteWorkspaceChartType) | | `mammoth dashboard context delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_delete` | `DELETE /dashboards/v3/contexts/{context_id}` (DeleteContext) | | `mammoth dashboard delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.delete` | `DELETE /dashboards/{dashboard_id}` (DeleteDashboard) | | `mammoth dashboard qa comment delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_comment_delete` | `DELETE /dashboards/{dashboard_id}/qa/sessions/{session_id}/comments/{comment_id}` (DeleteComment) | | `mammoth dashboard qa session delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_delete` | `DELETE /dashboards/{dashboard_id}/qa/sessions/{session_id}` (DashboardV3DeleteSession) | | `mammoth dashboard signature delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.signature_delete` | `DELETE /dashboards/v3/signatures/{signature_id}` (DeleteSignature) | | `mammoth dashboard style custom delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_custom_delete` | `DELETE /dashboards/v3/styles/custom/{style_id}` (DeleteCustomStyle) | | `mammoth dashboard tags delete` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.delete_tag` | `DELETE /dashboards/tags/{tag_id}` (DeleteDashboardTag) | | `mammoth dashboard tags merge` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.merge_tag` | `POST /dashboards/tags/{tag_id}/merge` (MergeDashboardTags) | | `mammoth dashboard template delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_delete` | `DELETE /dashboards/v3/templates/{template_id}` (DashboardV3DeleteTemplate) | | `mammoth dashboard template thumbnail clear` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_thumbnail_clear` | `DELETE /dashboards/v3/templates/{slug}/thumbnail` (DashboardV3DeleteTemplateThumbnail) | ## High impact | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dashboard archive` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.archive` | `POST /dashboards/{dashboard_id}/archive` (ArchiveDashboard) | | `mammoth dashboard embed config set` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_config_set` | `PUT /dashboards/{dashboard_id}/embed/config` (PutEmbedConfig) | | `mammoth dashboard embed key rotate` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_key_rotate` | `POST /dashboards/{dashboard_id}/embed/key` (RotateEmbedKey) | | `mammoth dashboard embed origin revoke` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_origin_revoke` | `DELETE /dashboards/{dashboard_id}/embed/origin` (RevokeOrigin) | | `mammoth dashboard embed secret rotate` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_secret_rotate` | `POST /workspaces/{workspace_id}/embed/secret` (RotateEmbedSecret) | | `mammoth dashboard import-workbook` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.import_workbook` | `POST /dashboards/v3/import/dataset` (ImportWorkbookDataset) | | `mammoth dashboard live-chart audience` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_audience` | `PATCH /dashboards/v3/live-charts/{dashboard_id}` (ChangeAudience) | | `mammoth dashboard pages add` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `returns_job` | `none` | `mammoth.api.dashboards.DashboardsAPI.add_pages` | `POST /dashboards/{dashboard_id}/pages` (AddPages) | | `mammoth dashboard tags set` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.set_tags` | `PUT /dashboards/{dashboard_id}/tags` (SetDashboardTags) | | `mammoth dashboard templates use` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.use_template` | `POST /dashboards/v3/templates/{slug}/use` (UseTemplate) | ## External effect | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dashboard action` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | `mammoth.api.dashboards.DashboardsAPI.action` | `POST /dashboards/{dashboard_id}/action` (DashboardAction) | | `mammoth dashboard email-updates set` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_set` | `PUT /dashboards/{dashboard_id}/email-updates` (SaveDashboardEmailUpdates) | | `mammoth dashboard email-updates test` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_test` | `POST /dashboards/{dashboard_id}/email-updates/test` (TestDashboardEmailUpdate) | | `mammoth dashboard engagement remind` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.engagement_remind` | `POST /dashboards/{dashboard_id}/engagement/remind` (PostDashboardEngagementRemind) | | `mammoth dashboard share` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.share` | `POST /dashboards/{dashboard_id}/share` (ShareDashboard) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dashboard attachment-create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.attachment_create` | `POST /dashboards/v3/attachments` (CreateAttachment) | | `mammoth dashboard audience digest set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.audience_digest_set` | `PUT /dashboards/{dashboard_id}/audience/digest` (SetAudienceDigest) | | `mammoth dashboard cancel-generation` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.cancel_generation` | `POST /dashboards/{dashboard_id}/cancel-generation` (CancelDashboardGeneration) | | `mammoth dashboard canvas restore` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.canvas_restore` | `POST /dashboards/{dashboard_id}/canvas/restore` (RestoreCanvas) | | `mammoth dashboard canvas save` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.canvas_save` | `PUT /dashboards/{dashboard_id}/canvas` (SaveCanvas) | | `mammoth dashboard chart-type create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chart_type_create` | `POST /dashboards/v3/chart-types` (CreateWorkspaceChartType) | | `mammoth dashboard chat attachment upload` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chat_attachment_upload` | `POST /dashboards/{dashboard_id}/chat/attachments` (UploadChatAttachment) | | `mammoth dashboard chat edit` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.chat_edit` | `POST /dashboards/{dashboard_id}/chat` (ChatEdit) | | `mammoth dashboard context apply` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_apply` | `POST /dashboards/{dashboard_id}/context-review/{review_id}/apply` (ApplyContextReview) | | `mammoth dashboard context create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_create` | `POST /dashboards/v3/contexts` (CreateContext) | | `mammoth dashboard context extract` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.extract_context` | `POST /dashboards/v3/contexts/extract` (ExtractContext) | | `mammoth dashboard context update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_update` | `PUT /dashboards/v3/contexts/{context_id}` (UpdateContext) | | `mammoth dashboard create-blank` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.create_blank` | `POST /dashboards/v3/blank` (CreateBlankDashboard) | | `mammoth dashboard descriptor-data` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.descriptor_data` | `POST /dashboards/{dashboard_id}/data` (DescriptorData) | | `mammoth dashboard duplicate` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.duplicate` | `POST /dashboards/v3/{dashboard_id}/duplicate` (DuplicateDashboard) | | `mammoth dashboard email-updates me set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_me_set` | `PUT /dashboards/{dashboard_id}/email-updates/me` (SetMyDashboardEmailUpdates) | | `mammoth dashboard embed lifetime set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_lifetime_set` | `PUT /workspaces/{workspace_id}/embed/lifetime` (SetEmbedLifetime) | | `mammoth dashboard embed preview-token create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_preview_token_create` | `POST /dashboards/{dashboard_id}/embed/preview-token` (PreviewToken) | | `mammoth dashboard exemplar extract` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.extract_exemplar` | `POST /dashboards/v3/exemplar/extract` (ExtractExemplar) | | `mammoth dashboard figure add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.append_figure` | `POST /dashboards/{dashboard_id}/figures` (AppendFigure) | | `mammoth dashboard figure-intent` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.figure_intent` | `POST /dashboards/{dashboard_id}/figure-intent` (FigureIntent) | | `mammoth dashboard filter add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dashboard filter remove` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dashboard live-chart create` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_create` | `POST /dashboards/v3/live-charts` (CreateLiveChart) | | `mammoth dashboard live-chart placement` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_placement` | `POST /dashboards/v3/live-charts/{dashboard_id}/placements` (RecordPlacement) | | `mammoth dashboard own-data accept` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_accept` | `POST /dashboards/v3/{dashboard_id}/own-data/accept` (AcceptOwnData) | | `mammoth dashboard own-data dismiss` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_dismiss` | `POST /dashboards/v3/{dashboard_id}/own-data/dismiss` (DismissOwnData) | | `mammoth dashboard own-data start` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_start` | `POST /dashboards/v3/{dashboard_id}/own-data` (StartOwnData) | | `mammoth dashboard page plan` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.page_plan` | `POST /dashboards/{dashboard_id}/plan-page` (PlanPage) | | `mammoth dashboard pdf export` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.pdf_export` | `POST /dashboards/{dashboard_id}/pdf` (ExportPdf) | | `mammoth dashboard published data` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_data` | `POST /dashboards/url/{url}/data` (DescriptorDataByUrl) | | `mammoth dashboard published pdf export` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_pdf_export` | `POST /dashboards/url/{url}/pdf` (ExportPdfByUrl) | | `mammoth dashboard published video export` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_video_export` | `POST /dashboards/url/{url}/video` (ExportVideoByUrl) | | `mammoth dashboard published-data-by-url` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_data_by_url` | `POST /dashboards/url/{url}/getPublishData` (GetPublishDataFromSqlByUrl) | | `mammoth dashboard qa ask` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_ask` | `POST /dashboards/{dashboard_id}/qa/sessions/{session_id}/ask` (Ask) | | `mammoth dashboard qa comment create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_comment_create` | `POST /dashboards/{dashboard_id}/qa/sessions/{session_id}/comments` (DashboardV3AddComment) | | `mammoth dashboard qa feedback` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_feedback` | `POST /dashboards/{dashboard_id}/qa/sessions/{session_id}/messages/{message_id}/feedback` (DashboardV3QaFeedback) | | `mammoth dashboard qa session create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_create` | `POST /dashboards/{dashboard_id}/qa/sessions` (CreateSession) | | `mammoth dashboard qa session fork` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_fork` | `POST /dashboards/{dashboard_id}/qa/sessions/{session_id}/fork` (ForkSession) | | `mammoth dashboard qa session rename` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_rename` | `PUT /dashboards/{dashboard_id}/qa/sessions/{session_id}/title` (RenameSession) | | `mammoth dashboard qa session set-visibility` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_set_visibility` | `PUT /dashboards/{dashboard_id}/qa/sessions/{session_id}/visibility` (DashboardV3SetVisibility) | | `mammoth dashboard qa settings set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_settings_set` | `PUT /dashboards/{dashboard_id}/qa/settings` (DashboardV3SetQaSettings) | | `mammoth dashboard query` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.query` | `POST /dashboards/{dashboard_id}/query` (AdhocQuery) | | `mammoth dashboard restore` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.restore` | `POST /dashboards/{dashboard_id}/restore` (RestoreDashboard) | | `mammoth dashboard rls assignment set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.rls_assignment_set` | `PUT /dashboards/{dashboard_id}/rls/assignments` (SetRlsAssignments) | | `mammoth dashboard signature create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.signature_create` | `POST /dashboards/v3/signatures` (CreateSignature) | | `mammoth dashboard signature update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.signature_update` | `PUT /dashboards/v3/signatures/{signature_id}` (UpdateSignature) | | `mammoth dashboard style custom create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_custom_create` | `POST /dashboards/v3/styles/custom` (CreateCustomStyle) | | `mammoth dashboard style custom update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_custom_update` | `PUT /dashboards/v3/styles/custom/{style_id}` (UpdateCustomStyle) | | `mammoth dashboard style default set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_default_set` | `PUT /dashboards/v3/styles/default` (SetDefaultStyle) | | `mammoth dashboard style derive` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_derive` | `POST /dashboards/v3/styles/derive` (DeriveStyle) | | `mammoth dashboard style extract-brand` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_extract_brand` | `POST /dashboards/v3/styles/extract-brand` (ExtractBrand) | | `mammoth dashboard swap-data` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.swap_data` | `POST /dashboards/v3/{dashboard_id}/swap-data` (SwapDashboardData) | | `mammoth dashboard tags rename` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.rename_tag` | `PATCH /dashboards/tags/{tag_id}` (RenameDashboardTag) | | `mammoth dashboard template apply` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_apply` | `POST /dashboards/v3/templates/apply` (ApplyTemplate) | | `mammoth dashboard template create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_create` | `POST /dashboards/v3/templates` (SaveTemplate) | | `mammoth dashboard template preview` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_preview` | `POST /dashboards/v3/templates/preview` (PreviewTemplate) | | `mammoth dashboard template rename` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_rename` | `PATCH /dashboards/v3/templates/{template_id}` (RenameTemplate) | | `mammoth dashboard template resolve-mapping` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_resolve_mapping` | `POST /dashboards/v3/templates/resolve-mapping` (ResolveTemplateMapping) | | `mammoth dashboard template thumbnail set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_thumbnail_set` | `PUT /dashboards/v3/templates/{slug}/thumbnail` (DashboardV3PutTemplateThumbnail) | | `mammoth dashboard templates pending` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.take_pending_template` | `POST /dashboards/v3/templates/pending` (DashboardV3TakePendingTemplate) | | `mammoth dashboard trash` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.trash` | `POST /dashboards/{dashboard_id}/trash` (TrashDashboard) | | `mammoth dashboard update` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | `mammoth.api.dashboards.DashboardsAPI.update` | `PATCH /dashboards/{dashboard_id}` (EditDashboard) | | `mammoth dashboard v3 generate` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.v3_generate` | `POST /dashboards/v3/generate` (GenerateDashboardV3) | | `mammoth dashboard video export` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.video_export` | `POST /dashboards/{dashboard_id}/video` (ExportVideo) | | `mammoth dashboard widget-data` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.widget_data` | `POST /dashboards/{dashboard_id}/widgets/data` (BulkWidgetData) | | `mammoth dashboard widget-data-by-url` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.widget_data_by_url` | `POST /dashboards/url/{url}/widgets/data` (BulkWidgetDataByUrl) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dashboard analytics` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.get_analytics` | `GET /dashboards/{dashboard_id}/analytics` (GetDashboardAnalytics) | | `mammoth dashboard assess-pbix` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.assess_pbix` | `POST /dashboards/v3/pbix/assess` (AssessPbix) | | `mammoth dashboard assess-twb` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.assess_twb` | `POST /dashboards/v3/twb/assess` (AssessTwb) | | `mammoth dashboard audience digest get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.audience_digest_get` | `GET /dashboards/{dashboard_id}/audience/digest` (GetAudienceDigest) | | `mammoth dashboard audience get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.audience` | `GET /dashboards/{dashboard_id}/audience` (GetDashboardAudience) | | `mammoth dashboard audience summary` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.audience_summary` | `GET /workspaces/{workspace_id}/dashboards/audience-summary` (AudienceSummary) | | `mammoth dashboard bi-export` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.export_powerbi` | `GET /dashboards/{dashboard_id}/tableau/export` (TableauExport) | | `mammoth dashboard bi-preflight` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.powerbi_preflight` | `GET /dashboards/{dashboard_id}/tableau` (TableauPreflightHandler) | | `mammoth dashboard canvas get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.canvas_get` | `GET /dashboards/{dashboard_id}/canvas` (GetCanvasDraft) | | `mammoth dashboard chart-type list` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chart_type_list` | `GET /dashboards/v3/chart-types` (ListWorkspaceChartTypes) | | `mammoth dashboard chat history` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chat_history` | `GET /dashboards/{dashboard_id}/chat` (DashboardV3ChatHistory) | | `mammoth dashboard columns` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.column_roster` | `GET /dashboards/{dashboard_id}/columns` (GetColumnRoster) | | `mammoth dashboard context list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.context_list` | `GET /dashboards/v3/contexts` (ListContexts) | | `mammoth dashboard context review` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_review` | `POST /dashboards/{dashboard_id}/context-review` (ReviewContext) | | `mammoth dashboard data draft` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.get_draft_data` | `POST /dashboards/{dashboard_id}/getDraftData` (GetDraftDataFromSql) | | `mammoth dashboard data published` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.get_publish_data` | `POST /dashboards/{dashboard_id}/getPublishData` (GetPublishDataFromSql) | | `mammoth dashboard email-updates get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_get` | `GET /dashboards/{dashboard_id}/email-updates` (GetDashboardEmailUpdates) | | `mammoth dashboard email-updates list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.email_updates_list` | `GET /dashboards/email-updates` (ListWorkspaceEmailUpdates) | | `mammoth dashboard email-updates me get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_me_get` | `GET /dashboards/{dashboard_id}/email-updates/me` (GetMyDashboardEmailUpdates) | | `mammoth dashboard embed config get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_config_get` | `GET /dashboards/{dashboard_id}/embed/config` (GetEmbedConfig) | | `mammoth dashboard embed usage get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_usage_get` | `GET /dashboards/{dashboard_id}/embed/usage` (GetEmbedUsage) | | `mammoth dashboard embed usage summary` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_usage_summary` | `GET /workspaces/{workspace_id}/dashboards/embed-usage` (EmbedUsageSummary) | | `mammoth dashboard engagement get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.engagement` | `GET /dashboards/{dashboard_id}/engagement` (GetDashboardEngagement) | | `mammoth dashboard engagement person` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.engagement_person` | `GET /dashboards/{dashboard_id}/engagement/people/{user_id}` (GetDashboardEngagementPerson) | | `mammoth dashboard figure drill` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.figure_drill` | `POST /dashboards/{dashboard_id}/drill` (FigureDrill) | | `mammoth dashboard figure recipe` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.figure_recipe` | `POST /dashboards/{dashboard_id}/figure-recipe` (FigureRecipe) | | `mammoth dashboard figure rows` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.figure_rows` | `POST /dashboards/{dashboard_id}/rows` (FigureRows) | | `mammoth dashboard filter list` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dashboard format-preview` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.format_preview` | `GET /dashboards/{dashboard_id}/format-preview` (FormatPreview) | | `mammoth dashboard gallery get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.gallery_get` | `GET /dashboards/public/templates/{slug}` (DashboardPublicTemplate) | | `mammoth dashboard gallery list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.gallery_list` | `GET /dashboards/public/templates` (DashboardPublicTemplates) | | `mammoth dashboard get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.get` | `GET /dashboards/{dashboard_id}` (GetDashboard) | | `mammoth dashboard get-by-url` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.get_by_url` | `GET /dashboards/url/{url}` (GetDashboardByUrl) | | `mammoth dashboard job-by-url` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.job_by_url` | `GET /dashboards/url/{url}/jobs/{job_id}` (GetDashboardJob) | | `mammoth dashboard list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.list` | `GET /dashboards` (ListDashboard) | | `mammoth dashboard live-chart get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_get` | `GET /dashboards/v3/live-charts/{dashboard_id}` (GetLiveChart) | | `mammoth dashboard live-chart list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.live_chart_list` | `GET /dashboards/v3/live-charts` (ListLiveCharts) | | `mammoth dashboard live-chart usage` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_usage` | `GET /dashboards/v3/live-charts/{dashboard_id}/usage` (GetUsage) | | `mammoth dashboard oembed` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.oembed` | `GET /dashboards/oembed` (Oembed) | | `mammoth dashboard og-card` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.og_card` | `GET /dashboards/{dashboard_id}/og-card` (OgCard) | | `mammoth dashboard own-data preview` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_preview` | `GET /dashboards/v3/{dashboard_id}/own-data/preview` (PreviewOwnData) | | `mammoth dashboard own-data status` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_status` | `GET /dashboards/v3/{dashboard_id}/own-data` (GetOwnData) | | `mammoth dashboard pbix-assess` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.attachment_assess` | `POST /dashboards/v3/attachments/{attachment_id}/assess` (AttachmentAssess) | | `mammoth dashboard pbix-intent` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.attachment_intent` | `POST /dashboards/v3/attachments/{attachment_id}/intent` (AttachmentIntent) | | `mammoth dashboard pdf-artifact` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.pdf_artifact` | `GET /dashboards/{dashboard_id}/pdf/{job_id}` (GetPdfArtifact) | | `mammoth dashboard published canvas` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_canvas` | `GET /dashboards/url/{url}/canvas` (GetCanvasPublished) | | `mammoth dashboard published drill` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_drill` | `POST /dashboards/url/{url}/drill` (FigureDrillByUrl) | | `mammoth dashboard published og-card` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_og_card` | `GET /dashboards/url/{url}/og-card` (OgCardByUrl) | | `mammoth dashboard published pdf-artifact` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_pdf_artifact` | `GET /dashboards/url/{url}/pdf/{job_id}` (GetPdfArtifactByUrl) | | `mammoth dashboard published rows` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_rows` | `POST /dashboards/url/{url}/rows` (FigureRowsByUrl) | | `mammoth dashboard published share-page` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_share_page` | `GET /dashboards/url/{url}/share` (SharePageByUrl) | | `mammoth dashboard published video-artifact` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_video_artifact` | `GET /dashboards/url/{url}/video.mp4` (VideoByUrl) | | `mammoth dashboard qa insights` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_insights` | `GET /dashboards/{dashboard_id}/qa/insights` (DashboardV3QaInsights) | | `mammoth dashboard qa session get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_get` | `GET /dashboards/{dashboard_id}/qa/sessions/{session_id}` (GetSession) | | `mammoth dashboard qa session list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.qa_session_list` | `GET /dashboards/{dashboard_id}/qa/sessions` (DashboardV3ListSessions) | | `mammoth dashboard qa settings get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_settings_get` | `GET /dashboards/{dashboard_id}/qa/settings` (DashboardV3GetQaSettings) | | `mammoth dashboard rls assignment list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.rls_assignment_list` | `GET /dashboards/{dashboard_id}/rls/assignments` (ListRlsAssignments) | | `mammoth dashboard rls column list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.rls_column_list` | `GET /dashboards/{dashboard_id}/rls/columns` (GetRlsColumns) | | `mammoth dashboard rls value list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.rls_value_list` | `GET /dashboards/{dashboard_id}/rls/values` (GetRlsDistinctValues) | | `mammoth dashboard signature list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.signature_list` | `GET /dashboards/v3/signatures` (ListSignatures) | | `mammoth dashboard source list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.get_sources` | `GET /dashboards/sources` (GetDashboardSources) | | `mammoth dashboard style custom list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.style_custom_list` | `GET /dashboards/v3/styles/custom` (ListCustomStyles) | | `mammoth dashboard style default get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_default_get` | `GET /dashboards/v3/styles/default` (GetDefaultStyle) | | `mammoth dashboard style preset list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.style_preset_list` | `GET /dashboards/v3/styles/presets` (ListStylePresets) | | `mammoth dashboard style token list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.style_token_list` | `GET /dashboards/v3/styles/tokens` (GetStyleTokens) | | `mammoth dashboard suggestion list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.suggestion_list` | `GET /dashboards/v3/suggestions` (DashboardSuggestions) | | `mammoth dashboard swap-fit` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.swap_fit` | `POST /dashboards/v3/swap/fit` (SwapFit) | | `mammoth dashboard tags list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.list_tags` | `GET /dashboards/tags` (ListDashboardTags) | | `mammoth dashboard template fit` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_fit` | `GET /dashboards/v3/templates/fit` (FitTemplates) | | `mammoth dashboard template get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_get` | `GET /dashboards/v3/templates/{template_id}` (DashboardV3GetTemplate) | | `mammoth dashboard template list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.template_list` | `GET /dashboards/v3/templates` (DashboardV3ListTemplates) | | `mammoth dashboard template thumbnail get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_thumbnail_get` | `GET /dashboards/v3/templates/{slug}/thumbnail` (DashboardV3TemplateThumbnail) | | `mammoth dashboard unpublished` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.unpublished` | `GET /dashboards/{dashboard_id}/unpublished` (GetUnpublishedChanges) | | `mammoth dashboard video-state` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.video_state` | `GET /dashboards/{dashboard_id}/video-state` (GetVideoState) | --- # mammoth data-app URL: https://mammoth.io/docs/build/cli/data-app/ · Updated: 2026-11-02 All 12 mammoth data-app commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.2.94, released 2026-10-21)—do not edit; run `npm run docs:capabilities`. 12 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth data-app delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth data-app user remove` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | ## External effect | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth data-app share` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | — | — | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth data-app create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth data-app update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth data-app upload` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | — | — | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth data-app active-job` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth data-app get` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth data-app job` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth data-app list` | `profile` | Read | `none` | — | `not_async` | `single_page` | — | — | | `mammoth data-app pipeline-changes` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth data-app user list` | `profile` | Read | `none` | — | `not_async` | `single_page` | — | — | --- # mammoth dataset URL: https://mammoth.io/docs/build/cli/dataset/ · Updated: 2026-11-02 All 37 mammoth dataset commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 37 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dataset broken-rows resolve` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.resolve_unstructured_rows` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/unstructured_rows` (PatchUnstructuredRows) | | `mammoth dataset bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets` (DeleteDatasets) | | `mammoth dataset delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}` (DeleteDataset) | | `mammoth dataset file-settings undo` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.file_settings_undo` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/file_settings` (UndoFileSettings) | ## High impact | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dataset bulk-update` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.bulk_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets` (UpdateDatasets) | | `mammoth dataset update` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}` (UpdateDataset) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dataset create` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.datasets.DatasetsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets` (CreateDatasets) | | `mammoth dataset create-from-pdf` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.create_from_pdf` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets-from-pdf` (CreateDatasetFromPdf) | | `mammoth dataset definition add` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.add_definition` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/definitions` (AddDatasetDefinition) | | `mammoth dataset definition remove` | `project` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.remove_definition` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/definitions/{definition_id}` (RemoveDatasetDefinition) | | `mammoth dataset download` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth dataset file-settings update` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.datasets.DatasetsAPI.file_settings_update` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/file_settings` (UpdateFileSettings) | | `mammoth dataset from-url follow` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset interpretation confirm` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.interpretation_confirm` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/interpretation` (ConfirmDatasetInterpretation) | | `mammoth dataset interpretation preview` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.interpretation_preview` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/interpretation/preview` (PreviewDatasetInterpretation) | | `mammoth dataset refresh` | `project` | Benign mutation | `prompt_or_yes` | `--yes` | `always_wait` | `none` | — | — | | `mammoth dataset rename` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset restore` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.restore` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/restore` (RestoreDataset) | | `mammoth dataset tool-claim redeem` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.tool_claim_redeem` | `POST /workspaces/{workspace_id}/projects/{project_id}/tool-claims` (RedeemToolClaim) | | `mammoth dataset trash` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.trash` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/trash` (TrashDataset) | | `mammoth dataset update-method set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth dataset batch-data` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.datasets.DatasetsAPI.get_batch_data` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches/{batch_id}/data` (GetBatchData) | | `mammoth dataset broken-rows list` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.get_unstructured_rows` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/unstructured_rows` (GetUnstructuredRows) | | `mammoth dataset column-stats` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.column_stats` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/column-stats` (GetProjectColumnStats) | | `mammoth dataset data` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.datasets.DatasetsAPI.get_data` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/data` (GetDatasetData) | | `mammoth dataset definition list` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.list_definitions` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/definitions` (GetDatasetDefinitions) | | `mammoth dataset download-plan` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset file-settings get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.get_file_settings` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/file_settings` (GetFileSettings) | | `mammoth dataset find` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset from-url links` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset from-url preview` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}` (GetDataset) | | `mammoth dataset list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.datasets.DatasetsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets` (GetDatasets) | | `mammoth dataset schema-diff` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset search` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.search` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/search` (SearchDatasetsByContent) | | `mammoth dataset tool-claim get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.tool_claim_get` | `GET /tool-claims` (GetToolClaim) | | `mammoth dataset update-method get` | `project` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth external-key URL: https://mammoth.io/docs/build/cli/external-key/ · Updated: 2026-11-02 All 4 mammoth external-key commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 4 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth external-key delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.external_keys.ExternalKeysAPI.delete` | `DELETE /workspaces/{workspace_id}/external_keys/{key_id}` (DeleteExternalKey) | | `mammoth external-key create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.external_keys.ExternalKeysAPI.create` | `POST /workspaces/{workspace_id}/external_keys` (AddExternalKey) | | `mammoth external-key get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.external_keys.ExternalKeysAPI.get` | `GET /workspaces/{workspace_id}/external_keys/{key_id}` (GetExternalKey) | | `mammoth external-key list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.external_keys.ExternalKeysAPI.list` | `GET /workspaces/{workspace_id}/external_keys` (GetKeysByWorkspaceId) | --- # mammoth file URL: https://mammoth.io/docs/build/cli/file/ · Updated: 2026-11-02 All 11 mammoth file commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 11 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth file bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.files.FilesAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/files` (DeleteFiles) | | `mammoth file delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.files.FilesAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}` (DeleteFile) | | `mammoth file set-password` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | — | — | | `mammoth file extract-sheets` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth file multi-sheet-extract` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.files.FilesAPI.create_datasets_from_multi_sheet` | `POST /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}/multi-sheet-extraction` (CreateDatasetsFromMultiSheetFile) | | `mammoth file multi-sheet-preview` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.files.FilesAPI.preview_multi_sheet` | `POST /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}/sheets/interpretation/preview` (PreviewMultiSheetInterpretation) | | `mammoth file update` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.files.FilesAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}` (UpdateFileConfigs) | | `mammoth file upload` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | `mammoth.api.files.FilesAPI.upload` | `POST /workspaces/{workspace_id}/projects/{project_id}/files` (CreateFileDataset) | | `mammoth file upload-folder` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | — | — | | `mammoth file get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.files.FilesAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}` (GetFileDetails) | | `mammoth file list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.files.FilesAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/files` (ListFiles) | --- # mammoth folder URL: https://mammoth.io/docs/build/cli/folder/ · Updated: 2026-11-02 All 10 mammoth folder commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 10 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth folder bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/folders` (DeleteFolders) | | `mammoth folder delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}` (DeleteFolder) | | `mammoth folder create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/folders` (CreateFolder) | | `mammoth folder move` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | `mammoth.api.folders.FoldersAPI.move` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/folders` (UpdateFolderResources) | | `mammoth folder trash` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.folders.FoldersAPI.trash` | `POST /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}/trash` (TrashFolder) | | `mammoth folder update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}` (UpdateFolderDetails) | | `mammoth folder find` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth folder get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}` (GetFolder) | | `mammoth folder list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.folders.FoldersAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/folders` (ListFolders) | | `mammoth folder root` | `project` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth history URL: https://mammoth.io/docs/build/cli/history/ · Updated: 2026-11-02 All 4 mammoth history commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 4 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth history resume` | `profile` | High impact | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth history undo` | `profile` | High impact | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth history list` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth history show` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | --- # CLI reference URL: https://mammoth.io/docs/build/cli/ · Updated: 2026-11-02 All 43 mammoth CLI command families (872 commands), each linking to its commands, blast radius and backing SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 43 command families: 872 commands, plus 51 API-only operations with no CLI command. Families with a single command, and the API-only operations, are grouped on [other](./other). | Family | Commands | Link | |---|---|---| | `mammoth activity` | 2 | [activity](./activity) | | `mammoth addon` | 6 | [addon](./addon) | | `mammoth agent` | 44 | [agent](./agent) | | `mammoth ai` | 5 | [ai](./ai) | | `mammoth annotation` | 5 | [annotation](./annotation) | | `mammoth auth` | 5 | [auth](./auth) | | `mammoth automation` | 13 | [automation](./automation) | | `mammoth batch` | 7 | [batch](./batch) | | `mammoth billing` | 27 | [billing](./billing) | | `mammoth browse` | 9 | [browse](./browse) | | `mammoth capability` | 3 | [capability](./capability) | | `mammoth client-app` | 5 | [client-app](./client-app) | | `mammoth collection` | 21 | [collection](./collection) | | `mammoth completion` | 2 | [completion](./completion) | | `mammoth config` | 4 | [config](./config) | | `mammoth connector` | 40 | [connector](./connector) | | `mammoth context` | 4 | [context](./context) | | `mammoth dashboard` | 167 | [dashboard](./dashboard) | | `mammoth dataset` | 37 | [dataset](./dataset) | | `mammoth external-key` | 4 | [external-key](./external-key) | | `mammoth file` | 11 | [file](./file) | | `mammoth folder` | 10 | [folder](./folder) | | `mammoth history` | 4 | [history](./history) | | `mammoth job` | 4 | [job](./job) | | `mammoth log` | 2 | [log](./log) | | `mammoth notification` | 5 | [notification](./notification) | | other | 61 | [other](./other) | | `mammoth parameter` | 14 | [parameter](./parameter) | | `mammoth project` | 25 | [project](./project) | | `mammoth recipe` | 2 | [recipe](./recipe) | | `mammoth schedule` | 5 | [schedule](./schedule) | | `mammoth schema` | 3 | [schema](./schema) | | `mammoth skill` | 7 | [skill](./skill) | | `mammoth snippet` | 8 | [snippet](./snippet) | | `mammoth support` | 117 | [support](./support) | | `mammoth template` | 5 | [template](./template) | | `mammoth token` | 3 | [token](./token) | | `mammoth trash` | 3 | [trash](./trash) | | `mammoth user` | 7 | [user](./user) | | `mammoth view` | 146 | [view](./view) | | `mammoth webhook` | 7 | [webhook](./webhook) | | `mammoth workflow` | 31 | [workflow](./workflow) | | `mammoth workspace` | 33 | [workspace](./workspace) | --- # mammoth job URL: https://mammoth.io/docs/build/cli/job/ · Updated: 2026-11-02 All 4 mammoth job commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 4 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth job get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.jobs.JobsAPI.get_job` | `GET /jobs/{job_id}` (GetJob) | | `mammoth job get-many` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.jobs.JobsAPI.get_jobs` | `GET /jobs` (GetJobs) | | `mammoth job wait` | `profile` | Read | `none` | — | `always_wait` | `none` | — | — | | `mammoth job wait-many` | `profile` | Read | `none` | — | `always_wait` | `none` | — | — | --- # mammoth log URL: https://mammoth.io/docs/build/cli/log/ · Updated: 2026-11-02 All 2 mammoth log commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 2 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth log path` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth log tail` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth notification URL: https://mammoth.io/docs/build/cli/notification/ · Updated: 2026-11-02 All 5 mammoth notification commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 5 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth notification delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.notifications.NotificationsAPI.delete` | `DELETE /notifications/{notification_id}` (DeleteNotification) | | `mammoth notification delete-batch` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.notifications.NotificationsAPI.delete_batch` | `DELETE /notifications` (DeleteNotifications) | | `mammoth notification update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.notifications.NotificationsAPI.update` | `PATCH /notifications/{notification_id}` (EditNotification) | | `mammoth notification update-batch` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.notifications.NotificationsAPI.update_batch` | `PATCH /notifications` (EditNotifications) | | `mammoth notification list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.notifications.NotificationsAPI.list` | `GET /notifications` (GetAllNotifications) | --- # Other commands URL: https://mammoth.io/docs/build/cli/other/ · Updated: 2026-11-02 10 mammoth CLI commands from single-command families and 51 API-only operations with no CLI command, with blast radius and backing SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 10 commands from single-command families, plus 51 API operations with no CLI command of their own. Documented together here rather than on a page apiece. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## External effect | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth upgrade` | `profile` | External effect | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth calc` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth capabilities` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth doctor` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth how` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth link` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth report list` | `profile` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.reports.ReportsAPI.list` | `GET /reports` (GetReports) | | `mammoth resolve` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth run` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth version` | `local` | Read | `none` | — | `not_async` | `none` | — | — | ## No CLI command | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/notify-job` (AgentNotifyJob) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /oauth/device-approve` (ApproveDevice) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /oauth/consent` (Authorize) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /oauth/authorize` (AuthorizeRedirect) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /collections/reach` (CollectionsReach) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /workspaces/{workspace_id}/mm-ue` (Create) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/public/gallery` (DashboardPublicGallery) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/gallery` (DashboardPublicGalleryHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/public/gallery/sitemap.xml` (DashboardPublicGallerySitemap) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/gallery/sitemap.xml` (DashboardPublicGallerySitemapHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/public/gallery/{slug}` (DashboardPublicGalleryTemplate) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/gallery/{slug}` (DashboardPublicGalleryTemplateHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/templates/{slug}` (DashboardPublicTemplateHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/public/templates/{slug}/thumbnail` (DashboardPublicTemplateThumbnail) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/templates` (DashboardPublicTemplatesHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /gdpr_hooks/{integration_name}/deauthorization` (DeleteUserData) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /oauth/consent/deny` (Deny) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /oauth/device-deny` (DenyDevice) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/needs-you/dismiss` (DismissAgentNeed) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/briefing` (GetAgentBriefing) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/documents/{sha}` (GetAgentChatDocument) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/documents/{sha}/pages/{page}` (GetAgentChatDocumentPage) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/images/{sha}` (GetAgentChatImage) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/{dashboard_id}/chat/attachments/{sha}` (GetChatAttachment) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /oauth/consent-info` (GetConsentInfo) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /oauth/device-info` (GetDeviceInfo) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/{dashboard_id}/head` (GetDraftHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /workspaces/{workspace_id}/subscription_v1/invoices/{invoice_id}` (GetInvoice) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /subscription/stripe/webhook` (HandleStripeWebhook) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /health` (HealthCheck) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/needs-you` (ListAgentNeedsYou) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /workspaces/{workspace_id}/subscription_v1/invoices` (ListInvoices) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/seen` (MarkAgentSessionSeen) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/oauth-callback` (OauthCallback) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /dashboards/{dashboard_id}/presence` (PostPresence) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/chart-placements` (RecordAgentChartPlacement) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/chip-feedback` (RecordAgentChipFeedback) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /workspaces/{workspace_id}/projects/{project_id}/events/resources/stream` (ResourceEventsStream) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /gdpr_hooks/shopify/customers/redact` (ShopifyCustomerRedact) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /gdpr_hooks/shopify/customers/data_request` (ShopifyDataRequest) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /gdpr_hooks/shopify/shop/redact` (ShopifyShopRedact) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /tool-claims` (StartToolClaim) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /jobs/{job_id}/stream` (StreamJob) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/credential-test` (TestAgentCredentialCard) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /dashboards/{dashboard_id}/track-action` (TrackAction) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /dashboards/url/{url}/track-heartbeat` (TrackHeartbeat) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /dashboards/url/{url}/track-view` (TrackView) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /unsubscribe` (UnsubscribeMessaging) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/documents` (UploadAgentChatDocument) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/images` (UploadAgentChatImage) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/sessions/{session_id}/turns/{turn_id}/events` (WatchAgentTurn) | --- # mammoth parameter URL: https://mammoth.io/docs/build/cli/parameter/ · Updated: 2026-11-02 All 14 mammoth parameter commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 14 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth parameter delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.delete` | `DELETE /workspaces/{workspace_id}/parameters/{parameter_id}` (DeleteParameter) | | `mammoth parameter group delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.group_delete` | `DELETE /workspaces/{workspace_id}/parameters/groups/{group_id}` (DeleteGroup) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth parameter create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.create` | `POST /workspaces/{workspace_id}/parameters` (CreateParameter) | | `mammoth parameter duplicate` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.duplicate` | `POST /workspaces/{workspace_id}/parameters/{parameter_id}/duplicate` (DuplicateParameter) | | `mammoth parameter group create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.group_create` | `POST /workspaces/{workspace_id}/parameters/groups` (CreateGroup) | | `mammoth parameter group reorder` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.group_reorder` | `POST /workspaces/{workspace_id}/parameters/groups/reorder` (ReorderGroups) | | `mammoth parameter group update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.group_update` | `PATCH /workspaces/{workspace_id}/parameters/groups/{group_id}` (UpdateGroup) | | `mammoth parameter rerun` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.rerun` | `POST /workspaces/{workspace_id}/parameters/{parameter_id}/rerun` (RerunParameter) | | `mammoth parameter rerun-all-stale` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.rerun_all_stale` | `POST /workspaces/{workspace_id}/parameters/rerun-all-stale` (RerunAllStale) | | `mammoth parameter update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.update` | `PATCH /workspaces/{workspace_id}/parameters/{parameter_id}` (UpdateParameter) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth parameter dependencies` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.dependencies` | `GET /workspaces/{workspace_id}/parameters/{parameter_id}/dependencies` (GetParameterDependencies) | | `mammoth parameter get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.get` | `GET /workspaces/{workspace_id}/parameters/{parameter_id}` (GetParameterDetail) | | `mammoth parameter group list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.parameters.ParametersAPI.group_list` | `GET /workspaces/{workspace_id}/parameters/groups` (ListGroups) | | `mammoth parameter list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.parameters.ParametersAPI.list` | `GET /workspaces/{workspace_id}/parameters` (ListParameters) | --- # mammoth project URL: https://mammoth.io/docs/build/cli/project/ · Updated: 2026-11-02 All 25 mammoth project commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 25 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth project bulk-delete` | `project` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.bulk_delete_and_verify` | `DELETE /workspaces/{workspace_id}/projects` (DeleteProjects) | ## High impact | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth project bulk-update` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.bulk_update` | `PATCH /workspaces/{workspace_id}/projects` (UpdateProjects) | | `mammoth project delete` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.delete_and_verify` | `DELETE /workspaces/{workspace_id}/projects/{project_id}` (DeleteProject) | | `mammoth project resource-dependencies update` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.projects.ProjectsAPI.resource_dependencies_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/resource-dependencies` (BulkModify) | | `mammoth project user add` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.add_users` | `POST /workspaces/{workspace_id}/projects/{project_id}/users` (AddUserProject) | | `mammoth project user remove` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.remove_users` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/users` (RemoveUserProject) | | `mammoth project user update` | `project` | High impact | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.user_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/users` (UpdateUserProject) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth project copy` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.projects.ProjectsAPI.copy` | `POST /workspaces/{workspace_id}/projects/{project_id}/copy` (CopyProject) | | `mammoth project create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.create` | `POST /workspaces/{workspace_id}/projects` (CreateProject) | | `mammoth project ensure` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth project memory add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth project memory remove` | `project` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth project sample-flow` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.sample_flow` | `POST /workspaces/{workspace_id}/projects/{project_id}/sample-flow` (CreateSampleFlow) | | `mammoth project update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}` (UpdateProject) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth project check` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth project checkpoint list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.projects.ProjectsAPI.checkpoint_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/checkpoints` (GetProjectCheckpoints) | | `mammoth project data-check list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.projects.ProjectsAPI.data_check_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/data-checks` (GetProjectDataChecks) | | `mammoth project get` | `project` | Read | `none` | — | `not_async` | `single_page` | — | — | | `mammoth project list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.projects.ProjectsAPI.list` | `GET /workspaces/{workspace_id}/projects` (GetProject) | | `mammoth project memory list` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth project needs-attention` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth project pending-changes` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.pending_changes` | `GET /workspaces/{workspace_id}/projects/{project_id}/pending-changes` (GetPendingChanges) | | `mammoth project publish-credentials` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.publish_credentials` | `GET /workspaces/{workspace_id}/projects/{project_id}/credentials` (GetPublishCredentials) | | `mammoth project resource-dependencies` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.resource_dependencies` | `GET /workspaces/{workspace_id}/projects/{project_id}/resource-dependencies` (GetResourceDependencies) | | `mammoth project resource-status` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.resource_status` | `GET /workspaces/{workspace_id}/projects/{project_id}/resource-status` (GetResourceStatus) | --- # mammoth recipe URL: https://mammoth.io/docs/build/cli/recipe/ · Updated: 2026-11-02 All 2 mammoth recipe commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 2 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth recipe run` | `profile` | High impact | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth recipe list` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth schedule URL: https://mammoth.io/docs/build/cli/schedule/ · Updated: 2026-11-02 All 5 mammoth schedule commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 5 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth schedule delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.schedules.SchedulesAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/schedules/{schedule_id}` (DeleteSchedule) | | `mammoth schedule create` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.schedules.SchedulesAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/schedules` (CreateSchedule) | | `mammoth schedule update` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.schedules.SchedulesAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/schedules/{schedule_id}` (PatchSchedule) | | `mammoth schedule get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.schedules.SchedulesAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/schedules/{schedule_id}` (GetSchedule) | | `mammoth schedule list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.schedules.SchedulesAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/schedules` (ListSchedules) | --- # mammoth schema URL: https://mammoth.io/docs/build/cli/schema/ · Updated: 2026-11-02 All 3 mammoth schema commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 3 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth schema find` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth schema get` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth schema list` | `local` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth skill URL: https://mammoth.io/docs/build/cli/skill/ · Updated: 2026-11-02 All 7 mammoth skill commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 7 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth skill agents-md install` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth skill install` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth skill uninstall` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth skill update` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth skill list` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth skill path` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth skill show` | `local` | Read | `none` | — | `not_async` | `none` | — | — | --- # mammoth snippet URL: https://mammoth.io/docs/build/cli/snippet/ · Updated: 2026-11-02 All 8 mammoth snippet commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 8 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth snippet delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.delete` | `DELETE /workspaces/{workspace_id}/snippets/{snippet_id}` (DeleteSnippet) | | `mammoth snippet create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.create` | `POST /workspaces/{workspace_id}/snippets` (CreateSnippet) | | `mammoth snippet duplicate` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.duplicate` | `POST /workspaces/{workspace_id}/snippets/{snippet_id}/duplicate` (DuplicateSnippet) | | `mammoth snippet rerun` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.rerun` | `POST /workspaces/{workspace_id}/snippets/{snippet_id}/rerun` (RerunSnippet) | | `mammoth snippet update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.update` | `PATCH /workspaces/{workspace_id}/snippets/{snippet_id}` (UpdateSnippet) | | `mammoth snippet dependencies` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.dependencies` | `GET /workspaces/{workspace_id}/snippets/{snippet_id}/dependencies` (GetSnippetDependencies) | | `mammoth snippet get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.get` | `GET /workspaces/{workspace_id}/snippets/{snippet_id}` (GetSnippetDetail) | | `mammoth snippet list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.snippets.SnippetsAPI.list` | `GET /workspaces/{workspace_id}/snippets` (ListSnippets) | --- # mammoth support URL: https://mammoth.io/docs/build/cli/support/ · Updated: 2026-11-02 All 117 mammoth support commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 117 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth support billing refund` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_refund` | `POST /support/billing/{workspace_id}/refund` (SupportRefund) | | `mammoth support partner client delete` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_client_delete` | `DELETE /support/partners/{partner_id}/workspaces/{workspace_id}` (SupportDeletePartnerClient) | | `mammoth support template discard` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_discard` | `DELETE /dashboards/v3/templates/admin/{slug}` (DashboardV3AdminDiscardImport) | ## High impact | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth support billing cancel-subscription` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_cancel_subscription` | `POST /support/billing/{workspace_id}/cancel-subscription` (SupportCancelSubscription) | | `mammoth support billing change-plan` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_change_plan` | `POST /support/billing/{workspace_id}/change-plan` (SupportChangePlan) | | `mammoth support billing end-trial` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_end_trial` | `POST /support/billing/{workspace_id}/end-trial` (SupportEndTrial) | | `mammoth support billing retry-payment` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_retry_payment` | `POST /support/billing/{workspace_id}/retry-payment` (SupportRetryPayment) | | `mammoth support billing start-trial` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_start_trial` | `POST /support/billing/{workspace_id}/start-trial` (SupportStartTrial) | | `mammoth support connector create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_create` | `POST /subscription/connectors` (CreateConnector) | | `mammoth support connector delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_delete` | `DELETE /subscription/connectors/{connector_id}` (DeleteConnector) | | `mammoth support connector update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_update` | `PUT /subscription/connectors/{connector_id}` (UpdateConnector) | | `mammoth support connector-profile add-connector` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_profile_add_connector` | `POST /subscription/connector-profiles/{profile_id}/connectors` (AddConnectorToProfile) | | `mammoth support connector-profile create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_profile_create` | `POST /subscription/connector-profiles` (CreateConnectorProfile) | | `mammoth support connector-profile delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_profile_delete` | `DELETE /subscription/connector-profiles/{profile_id}` (DeleteConnectorProfile) | | `mammoth support connector-profile update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_profile_update` | `PUT /subscription/connector-profiles/{profile_id}` (UpdateConnectorProfile) | | `mammoth support deal cancel-move-to-partner` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_cancel_move_to_partner` | `DELETE /support/deals/{deal_id}/move-to-partner` (SupportDealCancelMoveToPartner) | | `mammoth support deal create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_create` | `POST /support/deals` (SupportCreateDeal) | | `mammoth support deal move-to-partner` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_move_to_partner` | `POST /support/deals/{deal_id}/move-to-partner` (SupportDealMoveToPartner) | | `mammoth support deal opt-in` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_opt_in` | `POST /support/deals/{deal_id}/opt-in` (SupportDealOptIn) | | `mammoth support deal update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_update` | `PUT /support/deals/{deal_id}` (SupportUpdateDeal) | | `mammoth support feature create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_create` | `POST /subscription/features` (CreateFeature) | | `mammoth support feature delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_delete` | `DELETE /subscription/features/{feature_id}` (DeleteFeature) | | `mammoth support feature update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_update` | `PUT /subscription/features/{feature_id}` (UpdateFeature) | | `mammoth support feature-profile add-feature` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_profile_add_feature` | `POST /subscription/feature-profiles/{profile_id}/features` (AddFeatureToProfile) | | `mammoth support feature-profile create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_profile_create` | `POST /subscription/feature-profiles` (CreateFeatureProfile) | | `mammoth support feature-profile delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_profile_delete` | `DELETE /subscription/feature-profiles/{profile_id}` (DeleteFeatureProfile) | | `mammoth support feature-profile update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_profile_update` | `PUT /subscription/feature-profiles/{profile_id}` (UpdateFeatureProfile) | | `mammoth support ownership transfer` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.ownership_transfer` | `PATCH /settings/users` (TransferOwnerships) | | `mammoth support partner charge-invoices` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_charge_invoices` | `POST /support/partners/{partner_id}/charge-invoices` (SupportChargePartnerInvoices) | | `mammoth support partner client cancel-detach` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_client_cancel_detach` | `DELETE /support/partners/{partner_id}/workspaces/{workspace_id}/detach` (SupportCancelDetachClient) | | `mammoth support partner client detach` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_client_detach` | `POST /support/partners/{partner_id}/workspaces/{workspace_id}/detach` (SupportDetachClient) | | `mammoth support partner create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_create` | `POST /support/partners` (SupportCreatePartner) | | `mammoth support partner send-payment-link` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_send_payment_link` | `POST /support/partners/{partner_id}/send-payment-link` (SupportSendPartnerPaymentLink) | | `mammoth support partner update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_update` | `PUT /support/partners/{partner_id}` (SupportUpdatePartner) | | `mammoth support plan archive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_archive` | `POST /subscription/plans/{plan_id}/archive` (ArchivePlan) | | `mammoth support plan create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_create` | `POST /subscription/plans` (CreatePlan) | | `mammoth support plan delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_delete` | `DELETE /subscription/plans/{plan_id}` (DeletePlan) | | `mammoth support plan storage-option archive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_storage_option_archive` | `DELETE /subscription/plans/{plan_id}/storage-options/{option_id}` (ArchiveStorageOption) | | `mammoth support plan storage-option create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_storage_option_create` | `POST /subscription/plans/{plan_id}/storage-options` (CreateStorageOption) | | `mammoth support plan storage-option update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_storage_option_update` | `PUT /subscription/plans/{plan_id}/storage-options/{option_id}` (UpdateStorageOption) | | `mammoth support plan unarchive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_unarchive` | `POST /subscription/plans/{plan_id}/unarchive` (UnarchivePlan) | | `mammoth support plan update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_update` | `PUT /subscription/plans/{plan_id}` (UpdatePlan) | | `mammoth support plan update-entitlements` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_update_entitlements` | `PUT /subscription/plans/{plan_id}/entitlements` (UpdatePlanEntitlements) | | `mammoth support plan update-storage-tiers` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_update_storage_tiers` | `PUT /subscription/plans/{plan_id}/storage-tiers` (UpdateStorageTiers) | | `mammoth support project-move purge` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.project_move_purge` | `POST /support/project-moves/{move_id}/purge` (PurgeProjectMove) | | `mammoth support subscription create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.subscription_create` | `POST /support/workspaces/{workspace_id}/sms` (RegisterSubscription) | | `mammoth support subscription update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.subscription_update` | `PATCH /support/workspaces/{workspace_id}/sms` (UpdateSubscription) | | `mammoth support template edit` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_edit` | `PATCH /dashboards/v3/templates/admin/{slug}` (DashboardV3AdminEditRow) | | `mammoth support template import` | `workspace` | High impact | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_import` | `POST /dashboards/v3/templates/admin/import` (DashboardV3AdminImportBundle) | | `mammoth support template publish` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_publish` | `POST /dashboards/v3/templates/admin/{slug}/publish` (DashboardV3AdminPublish) | | `mammoth support template retire` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_retire` | `POST /dashboards/v3/templates/admin/{slug}/retire` (DashboardV3AdminRetire) | | `mammoth support template thumbnail clear` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_thumbnail_clear` | `DELETE /dashboards/v3/templates/admin/{slug}/thumbnail` (DashboardV3AdminDeleteThumbnail) | | `mammoth support template thumbnail set` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_thumbnail_set` | `PUT /dashboards/v3/templates/admin/{slug}/thumbnail` (DashboardV3AdminPutThumbnail) | | `mammoth support template unpublish` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_unpublish` | `POST /dashboards/v3/templates/admin/{slug}/unpublish` (DashboardV3AdminUnpublish) | | `mammoth support user register` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.user_register` | `POST /support/users` (RegisterUser) | | `mammoth support user update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.user_update` | `PATCH /support/users` (UpdateUserVerification) | | `mammoth support workspace archive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `returns_job` | `none` | `mammoth.api.support.SupportAPI.workspace_archive` | `POST /support/workspaces/{workspace_id}/archive` (SupportWorkspaceArchive) | | `mammoth support workspace chargebee-cancelled` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_chargebee_cancelled` | `POST /support/workspaces/{workspace_id}/chargebee-cancelled` (SupportWorkspaceChargebeeCancelled) | | `mammoth support workspace create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_create` | `POST /support/workspaces` (CreateWorkspaces) | | `mammoth support workspace delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_delete` | `DELETE /support/workspaces/{workspace_id}` (DeleteWorkspace) | | `mammoth support workspace invite cancel` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_invite_cancel` | `DELETE /support/workspaces/{workspace_id}/users/invites/{invite_id}` (SupportCancelWorkspaceInvite) | | `mammoth support workspace invite resend` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_invite_resend` | `POST /support/workspaces/{workspace_id}/users/invites/{invite_id}/resend` (SupportResendWorkspaceInvite) | | `mammoth support workspace project move-start` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.project_move_start` | `POST /support/workspaces/{workspace_id}/projects/{project_id}/move` (StartProjectMove) | | `mammoth support workspace restore-access` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_restore_access` | `POST /support/workspaces/{workspace_id}/restore-access` (RestoreWorkspaceAccess) | | `mammoth support workspace restore-archive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `returns_job` | `none` | `mammoth.api.support.SupportAPI.workspace_restore_archive` | `POST /support/workspaces/{workspace_id}/restore` (SupportWorkspaceArchiveRestore) | | `mammoth support workspace suspend-access` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_suspend_access` | `POST /support/workspaces/{workspace_id}/suspend-access` (SuspendWorkspaceAccess) | | `mammoth support workspace update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_update` | `PATCH /support/workspaces/{workspace_id}` (UpdateWorkspaceDetail) | | `mammoth support workspace user add` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_user_add` | `POST /support/workspaces/{workspace_id}/users` (AddUserToWorkspace) | | `mammoth support workspace user remove` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_user_remove` | `DELETE /support/workspaces/{workspace_id}/users/{user_id}` (RemoveWorkspaceUser) | | `mammoth support workspace user transfer` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_user_transfer` | `PATCH /support/workspaces/{workspace_id}/users` (TransferUserRoles) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth support connector bucket-impact` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_bucket_impact` | `GET /support/connectors/{connector_id}/bucket-impact` (SupportConnectorBucketImpact) | | `mammoth support connector list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.connector_list` | `GET /subscription/connectors` (ListSubscriptionConnectors) | | `mammoth support connector-profile list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.connector_profile_list` | `GET /subscription/connector-profiles` (ListConnectorProfiles) | | `mammoth support deal activity` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_activity` | `GET /support/deals/{deal_id}/activity` (SupportDealActivity) | | `mammoth support deal get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_get` | `GET /support/deals/{deal_id}` (SupportGetDeal) | | `mammoth support deal list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.deal_list` | `GET /support/deals` (SupportListDeals) | | `mammoth support deal preview-entitlement` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_preview_entitlement` | `GET /support/deals/{deal_id}/preview-entitlement` (SupportPreviewDealEntitlement) | | `mammoth support entitlement registry` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.entitlement_registry` | `GET /support/entitlements` (SupportEntitlementRegistry) | | `mammoth support feature list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.feature_list` | `GET /subscription/features` (ListFeatures) | | `mammoth support feature-profile list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.feature_profile_list` | `GET /subscription/feature-profiles` (ListFeatureProfiles) | | `mammoth support identity get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.identity_get` | `GET /support/identities/{user_id}` (SupportGetIdentity) | | `mammoth support identity list` | `workspace` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.support.SupportAPI.identity_list` | `GET /support/identities` (SupportListIdentities) | | `mammoth support partner activity` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_activity` | `GET /support/partners/{partner_id}/activity` (SupportPartnerActivity) | | `mammoth support partner billing` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_billing` | `GET /support/partners/{partner_id}/billing` (SupportGetPartnerBilling) | | `mammoth support partner client list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.partner_client_list` | `GET /support/partners/{partner_id}/workspaces` (SupportListPartnerClients) | | `mammoth support partner get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_get` | `GET /support/partners/{partner_id}` (SupportGetPartner) | | `mammoth support partner invoices` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_invoices` | `GET /support/partners/{partner_id}/invoices` (SupportListPartnerInvoices) | | `mammoth support partner list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.partner_list` | `GET /support/partners` (SupportListPartners) | | `mammoth support plan catalog` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_catalog` | `GET /support/plans/catalog` (SupportPlansCatalog) | | `mammoth support plan chargebee-list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.plan_chargebee_list` | `GET /support/sms` (GetPlans) | | `mammoth support plan get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_get` | `GET /subscription/plans/{plan_id}` (GetPlan) | | `mammoth support plan list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.plan_list` | `GET /subscription/plans` (ListSubscriptionPlans) | | `mammoth support plan self-serve-list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.plan_self_serve_list` | `GET /subscription/self-serve-plans` (ListSelfServePlans) | | `mammoth support plan storage-option list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.plan_storage_option_list` | `GET /subscription/plans/{plan_id}/storage-options` (ListStorageOptions) | | `mammoth support project-move get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.project_move_get` | `GET /support/project-moves/{move_id}` (GetProjectMove) | | `mammoth support search` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.search` | `GET /support/search` (SupportSearch) | | `mammoth support subscription get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.subscription_get` | `GET /support/workspaces/{workspace_id}/sms` (GetSubscriptionDetail) | | `mammoth support template audit` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_audit` | `GET /dashboards/v3/templates/admin/audit` (DashboardV3AdminAudit) | | `mammoth support template canvas` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_canvas` | `GET /dashboards/v3/templates/admin/{slug}/canvas` (DashboardV3AdminRowCanvas) | | `mammoth support template data-preview` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_data_preview` | `GET /dashboards/v3/templates/admin/{slug}/data-preview` (DashboardV3AdminDataPreview) | | `mammoth support template export` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_export` | `GET /dashboards/v3/templates/admin/{slug}/export` (DashboardV3AdminExportBundle) | | `mammoth support template export-dashboard` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_export_dashboard` | `GET /dashboards/v3/templates/admin/dashboards/{dashboard_id}/export` (DashboardV3AdminExportDashboard) | | `mammoth support template inspect` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_inspect` | `POST /dashboards/v3/templates/admin/inspect` (DashboardV3AdminInspectBundle) | | `mammoth support template list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.template_list` | `GET /dashboards/v3/templates/admin` (DashboardV3AdminCatalog) | | `mammoth support template snapshots` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.template_snapshots` | `GET /dashboards/v3/templates/admin/snapshots` (DashboardV3AdminSnapshots) | | `mammoth support triage` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.triage` | `GET /support/triage` (SupportTriage) | | `mammoth support usage-tiles` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.usage_tiles` | `GET /support/usage-tiles` (SupportUsageTiles) | | `mammoth support user list-all` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.user_list_all` | `GET /settings/users` (ListUsersOfWorkspaces) | | `mammoth support workspace activity` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_activity` | `GET /support/workspaces/{workspace_id}/activity` (SupportWorkspaceActivity) | | `mammoth support workspace archive-info` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_archive_info` | `GET /support/workspaces/{workspace_id}/archive` (SupportWorkspaceArchiveInfo) | | `mammoth support workspace deal-seed` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_deal_seed` | `GET /support/workspaces/{workspace_id}/deal-seed` (SupportWorkspaceDealSeed) | | `mammoth support workspace entitlement` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_entitlement` | `GET /support/workspaces/{workspace_id}/entitlement` (SupportWorkspaceEntitlement) | | `mammoth support workspace get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_get` | `GET /support/workspaces/{workspace_id}` (GetWorkspaceDetail) | | `mammoth support workspace list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.workspace_list` | `GET /support/workspaces` (ListWorkspaces) | | `mammoth support workspace project list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_project_list` | `GET /support/workspaces/{workspace_id}/projects` (ListProjects) | | `mammoth support workspace project move-check` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.project_move_check` | `GET /support/workspaces/{workspace_id}/projects/{project_id}/move` (CheckProjectMove) | | `mammoth support workspace user list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.workspace_user_list` | `GET /support/workspaces/{workspace_id}/users` (GetUserList) | --- # mammoth template URL: https://mammoth.io/docs/build/cli/template/ · Updated: 2026-11-02 All 5 mammoth template commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 5 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth template delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.templates.TemplatesAPI.delete` | `DELETE /workspaces/{workspace_id}/templates/{template_id}` (DeleteTemplate) | | `mammoth template create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.templates.TemplatesAPI.create` | `POST /workspaces/{workspace_id}/templates` (CreateTemplate) | | `mammoth template update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.templates.TemplatesAPI.update` | `PATCH /workspaces/{workspace_id}/templates/{template_id}` (UpdateTemplate) | | `mammoth template get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.templates.TemplatesAPI.get` | `GET /workspaces/{workspace_id}/templates/{template_id}` (GetTemplate) | | `mammoth template list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.templates.TemplatesAPI.list` | `GET /workspaces/{workspace_id}/templates` (ListTemplates) | --- # mammoth token URL: https://mammoth.io/docs/build/cli/token/ · Updated: 2026-11-02 All 3 mammoth token commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 3 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth token revoke` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth token create` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | — | — | | `mammoth token list` | `profile` | Read | `none` | — | `not_async` | `offset` | — | — | --- # mammoth trash URL: https://mammoth.io/docs/build/cli/trash/ · Updated: 2026-11-02 All 3 mammoth trash commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 3 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth trash add` | `profile` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.trash.TrashAPI.add` | `POST /workspaces/{workspace_id}/projects/{project_id}/trash` (BulkTrash) | | `mammoth trash restore` | `profile` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.trash.TrashAPI.restore` | `POST /workspaces/{workspace_id}/projects/{project_id}/trash/restore` (BulkRestore) | | `mammoth trash list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.trash.TrashAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/trash` (ListTrash) | --- # mammoth user URL: https://mammoth.io/docs/build/cli/user/ · Updated: 2026-11-02 All 7 mammoth user commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 7 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth user avatar delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.users.UsersAPI.avatar_delete` | `DELETE /self/avatar` (DeleteAvatar) | | `mammoth user delete-account` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.users.UsersAPI.delete_account` | `DELETE /self` (DeleteSelf) | | `mammoth user avatar upload` | `workspace` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.users.UsersAPI.avatar_upload` | `POST /self/avatar` (UploadProfilePic) | | `mammoth user preference update` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.update_preferences` | `PATCH /preferences` (UpdateUserPreferences) | | `mammoth user update` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.update` | `PATCH /self` (UpdateUser) | | `mammoth user get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.get` | `GET /self` (GetUserDetails) | | `mammoth user preference get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.get_preferences` | `GET /preferences` (GetUserPreferences) | --- # mammoth view URL: https://mammoth.io/docs/build/cli/view/ · Updated: 2026-11-02 All 146 mammoth view commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 146 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth view bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews` (DeleteMultipleDataviews) | | `mammoth view checkpoint delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.checkpoints.CheckpointsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints/{checkpoint_id}` (DeleteCheckpoint) | | `mammoth view conditional-format delete-all` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.conditional_format_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/conditional-format` (DeleteConditionalFormat) | | `mammoth view conditional-format replace` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth view data-check delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.data_checks.DataChecksAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks/{data_check_id}` (DeleteDataCheck) | | `mammoth view delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.client.ViewsResource.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}` (DeleteDataview) | | `mammoth view derivative delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.derivatives.DerivativesAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives/{derivative_id}` (DeleteDerivative) | | `mammoth view draft discard` | `project` | Destructive | `prompt_or_yes` | `--yes` | `always_wait` | `none` | — | — | | `mammoth view task delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.delete_task` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks/{task_id}` (DeleteTask) | | `mammoth view version delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions/{version_id}` (DeletePipelineVersion) | ## External effect | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth view export azure-blob` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export bigquery` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export create` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | `mammoth.api.exports.ExportsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports` (AddExport) | | `mammoth view export delete` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/{export_id}` (DeleteExport) | | `mammoth view export elasticsearch` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export email` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export ftp` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export live-link` | `project` | External effect | `yes_always` | `--yes` | `always_wait` | `none` | — | — | | `mammoth view export managed-s3` | `project` | External effect | `yes_always` | `--yes` | `always_wait` | `none` | — | — | | `mammoth view export mssql` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export mysql` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export onedrive` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export postgres` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export powerbi` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export publish-db` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.publish_db` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/publish-to-db` (CreatePublishToDb) | | `mammoth view export publish-db-update` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.publish_db_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/publish-to-db` (UpdatePublishToDb) | | `mammoth view export redshift` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export rest` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export rest-fill` | `project` | External effect | `yes_always` | `--yes` | `always_wait` | `none` | `mammoth.api.exports.ExportsAPI.rest_fill` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/rest-fill` (Suggest) | | `mammoth view export sftp` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export sharepoint` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export tableau` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export update` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/{export_id}` (EditExport) | ## Reversible pipeline step | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth view draft auto-run` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view draft enter` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view draft submit` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view exportable-config apply` | `project` | Reversible pipeline step | `confirm_target` | `--yes --confirm TARGET` | `returns_job` | `none` | `mammoth.api.dataviews.DataviewsAPI.apply_exportable_config` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/exportable-config` (ApplyExportableConfig) | | `mammoth view optimize` | `project` | Reversible pipeline step | `prompt_or_yes` | `--yes` | `start_or_wait` | `none` | `mammoth.api.dataviews.DataviewsAPI.optimize` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/optimize` (OptimizePipeline) | | `mammoth view task add` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.add_task` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks` (AddTask) | | `mammoth view task update` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.update_task` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks/{task_id}` (EditTask) | | `mammoth view transform add-column` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform add-sql` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform ai` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform batch` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform bulk-replace` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform combine-columns` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform convert-type` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform copy-columns` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform crosstab` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform date-diff` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform delete-columns` | `project` | Reversible pipeline step | `prompt_or_yes` | `--yes` | `always_wait` | `none` | — | — | | `mammoth view transform discard-duplicates` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform extract-date` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform fill-missing` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform filter` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform first-name` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform generate-sql` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform increment-date` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform join` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform json-extract` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform limit-rows` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform lookup` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform math` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform pivot` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform repeat-rows` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform replace` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform set-values` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform small-large` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform split` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform substring` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform text` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform unnest` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform update-column` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform window` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth view active-user mark` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.mark_active` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/activities` (MarkActiveUser) | | `mammoth view ai generate-data` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.generate_data` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data/generate` (Preview) | | `mammoth view ai profile` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.generate_profile` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/profile_generation` (GenerateProfile) | | `mammoth view checkpoint create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.checkpoints.CheckpointsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints` (AddCheckpoint) | | `mammoth view checkpoint update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.checkpoints.CheckpointsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints/{checkpoint_id}` (EditPatches) | | `mammoth view column format set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view conditional-format create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.conditional_format_create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/conditional-format` (CreateConditionalFormat) | | `mammoth view conditional-format update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.conditional_format_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/conditional-format` (UpdateConditionalFormat) | | `mammoth view create` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.client.ViewsResource.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews` (AddDataview) | | `mammoth view data-check create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.data_checks.DataChecksAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks` (AddDataCheck) | | `mammoth view data-check update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.data_checks.DataChecksAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks/{data_check_id}` (EditDatacheck) | | `mammoth view derivative create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.derivatives.DerivativesAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives` (CreateDerivative) | | `mammoth view derivative data` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.derivatives.DerivativesAPI.data` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives/{derivative_id}/data` (FetchDerivativeData) | | `mammoth view derivative update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.derivatives.DerivativesAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives/{derivative_id}` (EditDerivative) | | `mammoth view draft command` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.command` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/draft-mode` (ExecutePipelineDraftCommand) | | `mammoth view explore-panel add-to-dashboard` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view explore-panel edit` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view explore-panel set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view export csv` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth view export dataset` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth view export download` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth view pipeline edit` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.edit_pipeline` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline` (EditPipeline) | | `mammoth view pipeline rerun` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.rerun` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/rerun` (RerunFromSequence) | | `mammoth view restore` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.restore` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/restore` (RestoreDataview) | | `mammoth view task preview-cancel` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.preview_cancel` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/task_preview/{job_id}` (CancelTaskPreview) | | `mammoth view transform rename-columns` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view transform sort` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view trash` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.trash` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/trash` (TrashDataview) | | `mammoth view update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}` (Patch) | | `mammoth view variants create` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth view version apply` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.apply` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions/{version_id}` (ApplyPipelineVersion) | | `mammoth view version update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions/{version_id}` (EditPipelineVersion) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth view active-user list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dataviews.DataviewsAPI.active_users` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/activities` (GetActiveUsers) | | `mammoth view ai generation-info` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.ai.AIAPI.get_data_gen_info` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data/generate` (GetValidationInfo) | | `mammoth view analyze` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.analysis` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/analysis` (GetAnalysis) | | `mammoth view checkpoint get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.checkpoints.CheckpointsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints/{checkpoint_id}` (GetPipelineCheckpoint) | | `mammoth view checkpoint list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.checkpoints.CheckpointsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints` (GetPipelineCheckpoints) | | `mammoth view compare` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.compare` | `POST /workspaces/{workspace_id}/dataviews/compare` (CompareDataviews) | | `mammoth view conditional-format list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dataviews.DataviewsAPI.conditional_format_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/conditional-format` (GetConditionalFormat) | | `mammoth view data aggregate` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dataviews.DataviewsAPI.aggregate` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data/query` (ExecuteVolatileQuery) | | `mammoth view data compare` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view data drivers` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view data explore` | `project` | Read | `none` | — | `always_wait` | `none` | — | — | | `mammoth view data forecast` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view data get` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dataviews.DataviewsAPI.get_data` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data` (GetDataviewData) | | `mammoth view data profile` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view data query` | `project` | Read | `none` | — | `always_wait` | `offset` | `mammoth.api.dataviews.DataviewsAPI.query_data` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data` (GetDataviewDataPost) | | `mammoth view data-check get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.data_checks.DataChecksAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks/{data_check_id}` (GetPipelineDataCheck) | | `mammoth view data-check list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.data_checks.DataChecksAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks` (GetPipelineDataChecks) | | `mammoth view derivative list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.derivatives.DerivativesAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives` (ListDerivatives) | | `mammoth view draft status` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view explore-panel export-image` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.render_figure_svg` | `POST /dashboards/v3/render/svg` (RenderFigureSvg) | | `mammoth view explore-panel get` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view export get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/{export_id}` (GetPipelineExport) | | `mammoth view export list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.exports.ExportsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports` (GetPipelineExports) | | `mammoth view export runs` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.runs` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/{export_id}/runs` (ListExportRuns) | | `mammoth view exportable-config get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.get_exportable_config` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/exportable-config` (GetExportableConfig) | | `mammoth view get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.client.ViewsResource.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}` (GetDataviewInformationIndividual) | | `mammoth view impact` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.delete_impact` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/impact` (GetDataviewDeleteImpact) | | `mammoth view list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dataviews.DataviewsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews` (ListDataviews) | | `mammoth view parameter-context` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.parameter_context` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/parameter-context` (GetParameterContext) | | `mammoth view pipeline get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.get_pipeline` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline` (GetPipeline) | | `mammoth view pipeline items` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.items` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/items` (GetPipelineItems) | | `mammoth view pipeline items-all` | `project` | Read | `none` | — | `not_async` | `offset` | — | — | | `mammoth view pipeline wait` | `project` | Read | `none` | — | `always_wait` | `none` | — | — | | `mammoth view preview` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.preview` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/preview` (GetDataviewPreview) | | `mammoth view summary` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.summary` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/summary` (GetPanelSummary) | | `mammoth view task get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.get_task` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks/{task_id}` (GetPipelineTask) | | `mammoth view task list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.pipeline.PipelineAPI.list_tasks` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks` (GetPipelineTasks) | | `mammoth view task preview` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.preview_task` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/task_preview` (GetTaskPreview) | | `mammoth view version get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions/{version_id}` (GetPipelineVersion) | | `mammoth view version list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions` (GetPipelineVersions) | --- # mammoth webhook URL: https://mammoth.io/docs/build/cli/webhook/ · Updated: 2026-11-02 All 7 mammoth webhook commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 7 commands. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth webhook delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/webhooks/{webhook_id}` (DeleteWebhook) | | `mammoth webhook create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/webhooks` (CreateAWebhook) | | `mammoth webhook send` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.send_data` | `POST /webhooks/data/{webhook_uri}` (AddDataToWebhook) | | `mammoth webhook send-get` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.send_data_get` | `GET /webhooks/data/{webhook_uri}` (AddDataToWebhookUsingGetMethod) | | `mammoth webhook update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/webhooks/{webhook_id}` (UpdateWebhookConfigurations) | | `mammoth webhook get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/webhooks/{webhook_id}` (GetWebhookDetails) | | `mammoth webhook list` | `profile` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.webhooks.WebhooksAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/webhooks` (ListWebhooks) | --- # mammoth workflow URL: https://mammoth.io/docs/build/cli/workflow/ · Updated: 2026-11-02 All 31 mammoth workflow commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 31 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth workflow cleanup` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.cleanup` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/cleanup` (CleanupGhostWorkflows) | | `mammoth workflow delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}` (DeleteWorkflow) | | `mammoth workflow save-undo` | `project` | Destructive | `prompt_or_yes` | `--yes` | `always_wait` | `none` | `mammoth.api.workflows.WorkflowsAPI.undo_save` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/save/{run_id}/undo` (UndoWorkflowSave) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth workflow archive` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.set_archived` | `PUT /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/archived` (SetArchived) | | `mammoth workflow attach-dataset` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.attach_dataset` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/datasets` (AttachDataset) | | `mammoth workflow block add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.block_add` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/blocks` (AddSkeletonBlock) | | `mammoth workflow block auth` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.block_auth` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/blocks/{block_id}/auth` (PatchBlockAuth) | | `mammoth workflow block config` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.block_config` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/blocks/{block_id}/config` (PromoteSkeletonBlock) | | `mammoth workflow block type` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.block_type` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/blocks/{block_id}/type` (PatchBlockType) | | `mammoth workflow canvas` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.canvas` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/canvas` (UpdateCanvasState) | | `mammoth workflow create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows` (CreateWorkflow) | | `mammoth workflow duplicate` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.workflows.WorkflowsAPI.duplicate` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/duplicate` (DuplicateWorkflow) | | `mammoth workflow from-template` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.from_template` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/from-template` (InstantiateFromTemplate) | | `mammoth workflow resolve-held` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.resolve_held` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/held/resolve` (ResolveHeldChange) | | `mammoth workflow save` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.save` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/save` (SaveWorkflow) | | `mammoth workflow save-cancel-step` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.cancel_save_step` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/save/{run_id}/steps/{step}/cancel` (CancelWorkflowSaveStep) | | `mammoth workflow template build` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template samples` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}` (UpdateWorkflow) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth workflow get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}` (GetWorkflow) | | `mammoth workflow graph` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.graph` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/graph` (GetProjectWorkflowGraph) | | `mammoth workflow list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.workflows.WorkflowsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows` (ListWorkflows) | | `mammoth workflow template fit` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template get` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template list` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template preview` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template rank` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template sample-result` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow workspace-datasets` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.workspace_datasets` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/workspace-datasets` (ListWorkspaceDatasets) | | `mammoth workflow workspace-exports` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.workspace_exports` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/workspace-exports` (ListWorkspaceExports) | | `mammoth workflow workspace-sources` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.workspace_sources` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/workspace-sources` (ListWorkspaceSources) | --- # mammoth workspace URL: https://mammoth.io/docs/build/cli/workspace/ · Updated: 2026-11-02 All 33 mammoth workspace commands, each with its blast radius, confirmation policy and backing Python SDK method. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. 33 commands, grouped by blast radius. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Destructive | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth workspace invite delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth workspace invite revoke` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth workspace user remove` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.user_remove` | `DELETE /workspaces/{workspace_id}/users/{user_id}` (RemoveUser) | | `mammoth workspace user remove-batch` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.user_remove_batch` | `DELETE /workspaces/{workspace_id}/users` (RemoveUserFromWorkspace) | ## High impact | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth workspace delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.delete` | `DELETE /workspaces/{workspace_id}` (DeleteUserWorkspace) | | `mammoth workspace export-hosts set` | `workspace` | High impact | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.set_export_hosts` | `PUT /workspaces/{workspace_id}/export-hosts` (Update) | | `mammoth workspace invite update-role` | `workspace` | High impact | `yes_always` | `--yes` | `not_async` | `none` | — | — | | `mammoth workspace oauth-client create` | `workspace` | High impact | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.oauth_clients.OAuthClientsAPI.create` | `POST /workspaces/{workspace_id}/oauth-clients` (CreateOauthClient) | | `mammoth workspace oauth-client delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.oauth_clients.OAuthClientsAPI.delete` | `DELETE /workspaces/{workspace_id}/oauth-clients/{oauth_client_id}` (DeleteOauthClient) | | `mammoth workspace oauth-client revoke-grant` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.oauth_clients.OAuthClientsAPI.revoke_grant` | `DELETE /workspaces/{workspace_id}/oauth-clients/{oauth_client_id}/grant` (RevokeOauthGrant) | | `mammoth workspace reactivate` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.reactivate` | `POST /workspaces/{workspace_id}/reactivate` (ReactivateWorkspace) | | `mammoth workspace update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.update` | `PATCH /workspaces/{workspace_id}` (UpdateWorkspace) | | `mammoth workspace user update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.update_user` | `PATCH /workspaces/{workspace_id}/users/{user_id}` (UpdateUserInWorkspace) | | `mammoth workspace user update-batch` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.user_update_batch` | `PATCH /workspaces/{workspace_id}/users` (UpdateUserToWorkspace) | ## Benign mutation | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth workspace accept-invite` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.accept_invite` | `POST /accept-invite` (AcceptInvite) | | `mammoth workspace check-expression` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.check_expression` | `POST /workspaces/{workspace_id}/ai/check-expression` (GenerateCheckExpression) | | `mammoth workspace create` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.create` | `POST /workspaces` (CreateWorkspace) | | `mammoth workspace invite resend` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth workspace llm-task` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.llm_task` | `POST /workspaces/{workspace_id}/llm` (RunLlmTask) | | `mammoth workspace segment update` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.segment_update` | `PATCH /workspaces/{workspace_id}/split-segments` (UpdateSegments) | | `mammoth workspace user add` | `workspace` | Benign mutation | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.user_add` | `POST /workspaces/{workspace_id}/users` (AddUserInWorkspace) | ## Read | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth workspace app-usage` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.app_usage` | `GET /workspaces/{workspace_id}/app-usage` (GetAppUsage) | | `mammoth workspace current` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.current` | `GET /workspaces/current` (GetCurrentWorkspace) | | `mammoth workspace export-hosts get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.export_hosts` | `GET /workspaces/{workspace_id}/export-hosts` (Read) | | `mammoth workspace get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.get` | `GET /workspaces/{workspace_id}` (GetWorkspace) | | `mammoth workspace home` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.home_summary` | `GET /workspaces/{workspace_id}/home` (GetHomeSummary) | | `mammoth workspace invite list` | `workspace` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workspace list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.workspace.WorkspaceAPI.list` | `GET /workspaces` (GetWorkspaces) | | `mammoth workspace oauth-client list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.oauth_clients.OAuthClientsAPI.list` | `GET /workspaces/{workspace_id}/oauth-clients` (ListOauthClients) | | `mammoth workspace segment list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.workspaces.WorkspacesAPI.segment_list` | `GET /workspaces/{workspace_id}/split-segments` (GetSegments) | | `mammoth workspace storage-breakdown` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.storage_breakdown` | `GET /workspaces/{workspace_id}/storage-breakdown` (GetStorageBreakdown) | | `mammoth workspace user get` | `workspace` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workspace user list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.workspace.WorkspaceAPI.list_users` | `GET /workspaces/{workspace_id}/users` (GetUsersInWorkspace) | --- # Mammoth CLI capability contract URL: https://mammoth.io/docs/build/contract/ · Updated: 2026-11-02 Every mammoth CLI command and API-only operation (923 rows across 43 families), generated from `mammoth schema list` and `mammoth capability list`. > GENERATED from `mammoth schema list` and `mammoth capability list` (mammoth-cli 2.4.0, released 2026-10-29)—do not edit; run `npm run docs:capabilities`. Every command the mammoth CLI exposes, with its blast radius, its confirmation policy, its wait and pagination behavior, its backing Python SDK method, and the API operation behind it. 872 commands and 51 API-only operations, 923 rows across 43 families. "Off a terminal" is what a command's confirmation policy requires when nothing can answer a prompt, as in an agent or CI run: `--yes`, plus `--confirm` with the exact target for `confirm_target` commands. `TARGET` stands for the id or name the command acts on; the CLI's `confirmation_required` error names it. The SDK symbol and API operation come from `mammoth capability list`. A command that list does not map to one shows — in both columns; `mammoth schema get ` describes any command in full. ## Blast radius classes | Blast radius | Value | What it means | |---|---|---| | Destructive | `destructive` | Removes data. | | High impact | `high_impact` | Wide effect. | | External effect | `external_effect` | Reaches outside Mammoth. Treat as not undoable. | | Reversible pipeline step | `reversible_pipeline` | A pipeline step that can be undone. | | Benign mutation | `benign_mutation` | Creates or updates. Low consequence. | | Read | `read` | Returns data, changes nothing. | ## All commands | Command | Scope | Blast radius | Confirmation | Off a terminal | Wait | Pagination | SDK symbol | API operation | |---|---|---|---|---|---|---|---|---| | `mammoth agent access grant revoke` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_grant_revoke` | `DELETE /agents/access/grants/{grant_id}` (RevokeAgentAccess) | | `mammoth agent access request resolve` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_request_resolve` | `PATCH /agents/access/requests/{request_id}` (ResolveAgentAccessRequest) | | `mammoth agent action delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.action_delete` | `DELETE /agents/sessions/{session_id}/actions/{action_id}` (DeleteAgentSessionAction) | | `mammoth agent session delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.session_delete` | `DELETE /agents/sessions/{session_id}` (DeleteAgentSession) | | `mammoth annotation delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.annotations.AnnotationsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/annotations/{annotation_id}` (DeleteAnnotation) | | `mammoth automation delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}` (DeleteAutomation) | | `mammoth batch bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.batches.BatchesAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches` (DeleteBatches) | | `mammoth batch delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `returns_job` | `none` | `mammoth.api.batches.BatchesAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches/{batch_id}` (DeleteBatch) | | `mammoth billing stripe held-change cancel` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_held_change_cancel` | `POST /workspaces/{workspace_id}/subscription/held-change/cancel` (CancelHeldChange) | | `mammoth client-app delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.clientapps.ClientAppsAPI.delete` | `DELETE /workspaces/{workspace_id}/clientapps/{client_key}` (DeleteApp) | | `mammoth collection dashboards remove` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.remove_dashboard` | `DELETE /collections/{collection_id}/dashboards/{dashboard_id}` (RemoveDashboard) | | `mammoth collection delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.delete` | `DELETE /collections/{collection_id}` (DeleteCollection) | | `mammoth collection members remove` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.remove_member` | `DELETE /collections/{collection_id}/members` (RemoveMember) | | `mammoth connector connection delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.delete_connection` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}` (DeleteConnection) | | `mammoth connector draft discard` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.discard` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}` (DiscardConnectorDraft) | | `mammoth connector ds-config delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.delete_ds_config` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs/{ds_config_key}` (DeleteDsConfig) | | `mammoth connector ds-config delete-all` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.ds_config_delete_all` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs` (DeleteDsConfigs) | | `mammoth dashboard chart-type delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chart_type_delete` | `DELETE /dashboards/v3/chart-types/{chart_type_id}` (DeleteWorkspaceChartType) | | `mammoth dashboard context delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_delete` | `DELETE /dashboards/v3/contexts/{context_id}` (DeleteContext) | | `mammoth dashboard delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.delete` | `DELETE /dashboards/{dashboard_id}` (DeleteDashboard) | | `mammoth dashboard qa comment delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_comment_delete` | `DELETE /dashboards/{dashboard_id}/qa/sessions/{session_id}/comments/{comment_id}` (DeleteComment) | | `mammoth dashboard qa session delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_delete` | `DELETE /dashboards/{dashboard_id}/qa/sessions/{session_id}` (DashboardV3DeleteSession) | | `mammoth dashboard signature delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.signature_delete` | `DELETE /dashboards/v3/signatures/{signature_id}` (DeleteSignature) | | `mammoth dashboard style custom delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_custom_delete` | `DELETE /dashboards/v3/styles/custom/{style_id}` (DeleteCustomStyle) | | `mammoth dashboard tags delete` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.delete_tag` | `DELETE /dashboards/tags/{tag_id}` (DeleteDashboardTag) | | `mammoth dashboard tags merge` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.merge_tag` | `POST /dashboards/tags/{tag_id}/merge` (MergeDashboardTags) | | `mammoth dashboard template delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_delete` | `DELETE /dashboards/v3/templates/{template_id}` (DashboardV3DeleteTemplate) | | `mammoth dashboard template thumbnail clear` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_thumbnail_clear` | `DELETE /dashboards/v3/templates/{slug}/thumbnail` (DashboardV3DeleteTemplateThumbnail) | | `mammoth dataset broken-rows resolve` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.resolve_unstructured_rows` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/unstructured_rows` (PatchUnstructuredRows) | | `mammoth dataset bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets` (DeleteDatasets) | | `mammoth dataset delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}` (DeleteDataset) | | `mammoth dataset file-settings undo` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.file_settings_undo` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/file_settings` (UndoFileSettings) | | `mammoth external-key delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.external_keys.ExternalKeysAPI.delete` | `DELETE /workspaces/{workspace_id}/external_keys/{key_id}` (DeleteExternalKey) | | `mammoth file bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.files.FilesAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/files` (DeleteFiles) | | `mammoth file delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.files.FilesAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}` (DeleteFile) | | `mammoth folder bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/folders` (DeleteFolders) | | `mammoth folder delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}` (DeleteFolder) | | `mammoth notification delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.notifications.NotificationsAPI.delete` | `DELETE /notifications/{notification_id}` (DeleteNotification) | | `mammoth notification delete-batch` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.notifications.NotificationsAPI.delete_batch` | `DELETE /notifications` (DeleteNotifications) | | `mammoth parameter delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.delete` | `DELETE /workspaces/{workspace_id}/parameters/{parameter_id}` (DeleteParameter) | | `mammoth parameter group delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.group_delete` | `DELETE /workspaces/{workspace_id}/parameters/groups/{group_id}` (DeleteGroup) | | `mammoth project bulk-delete` | `project` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.bulk_delete_and_verify` | `DELETE /workspaces/{workspace_id}/projects` (DeleteProjects) | | `mammoth schedule delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.schedules.SchedulesAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/schedules/{schedule_id}` (DeleteSchedule) | | `mammoth snippet delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.delete` | `DELETE /workspaces/{workspace_id}/snippets/{snippet_id}` (DeleteSnippet) | | `mammoth support billing refund` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_refund` | `POST /support/billing/{workspace_id}/refund` (SupportRefund) | | `mammoth support partner client delete` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_client_delete` | `DELETE /support/partners/{partner_id}/workspaces/{workspace_id}` (SupportDeletePartnerClient) | | `mammoth support template discard` | `workspace` | Destructive | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_discard` | `DELETE /dashboards/v3/templates/admin/{slug}` (DashboardV3AdminDiscardImport) | | `mammoth template delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.templates.TemplatesAPI.delete` | `DELETE /workspaces/{workspace_id}/templates/{template_id}` (DeleteTemplate) | | `mammoth token revoke` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth user avatar delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.users.UsersAPI.avatar_delete` | `DELETE /self/avatar` (DeleteAvatar) | | `mammoth view bulk-delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.bulk_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews` (DeleteMultipleDataviews) | | `mammoth view checkpoint delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.checkpoints.CheckpointsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints/{checkpoint_id}` (DeleteCheckpoint) | | `mammoth view conditional-format delete-all` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.conditional_format_delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/conditional-format` (DeleteConditionalFormat) | | `mammoth view conditional-format replace` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth view data-check delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.data_checks.DataChecksAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks/{data_check_id}` (DeleteDataCheck) | | `mammoth view delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.client.ViewsResource.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}` (DeleteDataview) | | `mammoth view derivative delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.derivatives.DerivativesAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives/{derivative_id}` (DeleteDerivative) | | `mammoth view draft discard` | `project` | Destructive | `prompt_or_yes` | `--yes` | `always_wait` | `none` | — | — | | `mammoth view task delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.delete_task` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks/{task_id}` (DeleteTask) | | `mammoth view version delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions/{version_id}` (DeletePipelineVersion) | | `mammoth webhook delete` | `profile` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/webhooks/{webhook_id}` (DeleteWebhook) | | `mammoth workflow cleanup` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.cleanup` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/cleanup` (CleanupGhostWorkflows) | | `mammoth workflow delete` | `project` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}` (DeleteWorkflow) | | `mammoth workflow save-undo` | `project` | Destructive | `prompt_or_yes` | `--yes` | `always_wait` | `none` | `mammoth.api.workflows.WorkflowsAPI.undo_save` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/save/{run_id}/undo` (UndoWorkflowSave) | | `mammoth workspace invite delete` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth workspace invite revoke` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth workspace user remove` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.user_remove` | `DELETE /workspaces/{workspace_id}/users/{user_id}` (RemoveUser) | | `mammoth workspace user remove-batch` | `workspace` | Destructive | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.user_remove_batch` | `DELETE /workspaces/{workspace_id}/users` (RemoveUserFromWorkspace) | | `mammoth addon connector add` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.add_connector` | `POST /workspaces/{workspace_id}/addons/connectors` (AddConnectorAddon) | | `mammoth addon connector remove` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.remove_connector` | `DELETE /workspaces/{workspace_id}/addons/connectors` (RemoveConnectorAddon) | | `mammoth addon storage add` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.add_storage` | `POST /workspaces/{workspace_id}/addons/storage` (AddStorageAddon) | | `mammoth addon storage remove` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.remove_storage` | `DELETE /workspaces/{workspace_id}/addons/storage` (RemoveStorageAddon) | | `mammoth addon user add` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.add_users` | `POST /workspaces/{workspace_id}/addons/users` (AddUserSeatsAddon) | | `mammoth addon user remove` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.addons.AddonsAPI.remove_users` | `DELETE /workspaces/{workspace_id}/addons/users` (RemoveUserSeatsAddon) | | `mammoth agent access settings update` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_settings_update` | `PATCH /agents/access/settings` (UpdateAgentSettings) | | `mammoth auth connected-apps revoke` | `local` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.revoke_connected_app` | `DELETE /self/oauth-grants/{oauth_grant_id}` (RevokeConnectedApp) | | `mammoth billing hosted-page` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.hosted_page` | `POST /workspaces/{workspace_id}/subscription_v1/hosted-page` (FetchHostedPage) | | `mammoth billing invoice charge` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.invoice_charge` | `POST /workspaces/{workspace_id}/invoices/charge` (ChargeWorkspaceInvoices) | | `mammoth billing stripe cancel` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_cancel` | `POST /workspaces/{workspace_id}/subscription/cancel` (CancelWorkspaceSubscription) | | `mammoth billing stripe checkout-url` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_checkout_url` | `POST /workspaces/{workspace_id}/subscription/create-checkout` (CreateCheckoutUrl) | | `mammoth billing stripe create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_create` | `POST /workspaces/{workspace_id}/subscription` (CreateWorkspaceSubscription) | | `mammoth billing stripe end-trial` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_end_trial` | `POST /workspaces/{workspace_id}/subscription/end-trial` (EndTrialAndStartSubscription) | | `mammoth billing stripe payment-method delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_payment_method_delete` | `DELETE /workspaces/{workspace_id}/subscription/payment-methods/{payment_method_id}` (DeletePaymentMethod) | | `mammoth billing stripe payment-method set-default` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_payment_method_set_default` | `POST /workspaces/{workspace_id}/subscription/payment-methods/default` (SetDefaultPaymentMethod) | | `mammoth billing stripe portal-url` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_portal_url` | `POST /workspaces/{workspace_id}/subscription/customer-portal` (CreateCustomerPortalUrl) | | `mammoth billing stripe resume` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_resume` | `POST /workspaces/{workspace_id}/subscription/resume` (ResumeWorkspaceSubscription) | | `mammoth billing stripe retry-payment` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_retry_payment` | `POST /workspaces/{workspace_id}/subscription/retry-payment` (RetryPayment) | | `mammoth billing stripe storage set` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_storage_update` | `PUT /workspaces/{workspace_id}/subscription/storage` (UpdateSubscriptionStorage) | | `mammoth billing stripe sync` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_sync` | `POST /workspaces/{workspace_id}/subscription/sync` (SyncSubscription) | | `mammoth billing subscription update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.billing.BillingAPI.subscription_update` | `PATCH /workspaces/{workspace_id}/subscription_v1` (UpdateSubscriptionDetail) | | `mammoth client-app create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.clientapps.ClientAppsAPI.create` | `POST /workspaces/{workspace_id}/clientapps` (CreateApp) | | `mammoth client-app update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.clientapps.ClientAppsAPI.update` | `PATCH /workspaces/{workspace_id}/clientapps/{client_key}` (UpdateApp) | | `mammoth dashboard archive` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.archive` | `POST /dashboards/{dashboard_id}/archive` (ArchiveDashboard) | | `mammoth dashboard embed config set` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_config_set` | `PUT /dashboards/{dashboard_id}/embed/config` (PutEmbedConfig) | | `mammoth dashboard embed key rotate` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_key_rotate` | `POST /dashboards/{dashboard_id}/embed/key` (RotateEmbedKey) | | `mammoth dashboard embed origin revoke` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_origin_revoke` | `DELETE /dashboards/{dashboard_id}/embed/origin` (RevokeOrigin) | | `mammoth dashboard embed secret rotate` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_secret_rotate` | `POST /workspaces/{workspace_id}/embed/secret` (RotateEmbedSecret) | | `mammoth dashboard import-workbook` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.import_workbook` | `POST /dashboards/v3/import/dataset` (ImportWorkbookDataset) | | `mammoth dashboard live-chart audience` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_audience` | `PATCH /dashboards/v3/live-charts/{dashboard_id}` (ChangeAudience) | | `mammoth dashboard pages add` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `returns_job` | `none` | `mammoth.api.dashboards.DashboardsAPI.add_pages` | `POST /dashboards/{dashboard_id}/pages` (AddPages) | | `mammoth dashboard tags set` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.set_tags` | `PUT /dashboards/{dashboard_id}/tags` (SetDashboardTags) | | `mammoth dashboard templates use` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.use_template` | `POST /dashboards/v3/templates/{slug}/use` (UseTemplate) | | `mammoth dataset bulk-update` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.bulk_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets` (UpdateDatasets) | | `mammoth dataset update` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}` (UpdateDataset) | | `mammoth external-key create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.external_keys.ExternalKeysAPI.create` | `POST /workspaces/{workspace_id}/external_keys` (AddExternalKey) | | `mammoth file set-password` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | — | — | | `mammoth history resume` | `profile` | High impact | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth history undo` | `profile` | High impact | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth project bulk-update` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.bulk_update` | `PATCH /workspaces/{workspace_id}/projects` (UpdateProjects) | | `mammoth project delete` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.delete_and_verify` | `DELETE /workspaces/{workspace_id}/projects/{project_id}` (DeleteProject) | | `mammoth project resource-dependencies update` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.projects.ProjectsAPI.resource_dependencies_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/resource-dependencies` (BulkModify) | | `mammoth project user add` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.add_users` | `POST /workspaces/{workspace_id}/projects/{project_id}/users` (AddUserProject) | | `mammoth project user remove` | `project` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.remove_users` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/users` (RemoveUserProject) | | `mammoth project user update` | `project` | High impact | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.user_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/users` (UpdateUserProject) | | `mammoth recipe run` | `profile` | High impact | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth support billing cancel-subscription` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_cancel_subscription` | `POST /support/billing/{workspace_id}/cancel-subscription` (SupportCancelSubscription) | | `mammoth support billing change-plan` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_change_plan` | `POST /support/billing/{workspace_id}/change-plan` (SupportChangePlan) | | `mammoth support billing end-trial` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_end_trial` | `POST /support/billing/{workspace_id}/end-trial` (SupportEndTrial) | | `mammoth support billing retry-payment` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_retry_payment` | `POST /support/billing/{workspace_id}/retry-payment` (SupportRetryPayment) | | `mammoth support billing start-trial` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.billing_start_trial` | `POST /support/billing/{workspace_id}/start-trial` (SupportStartTrial) | | `mammoth support connector create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_create` | `POST /subscription/connectors` (CreateConnector) | | `mammoth support connector delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_delete` | `DELETE /subscription/connectors/{connector_id}` (DeleteConnector) | | `mammoth support connector update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_update` | `PUT /subscription/connectors/{connector_id}` (UpdateConnector) | | `mammoth support connector-profile add-connector` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_profile_add_connector` | `POST /subscription/connector-profiles/{profile_id}/connectors` (AddConnectorToProfile) | | `mammoth support connector-profile create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_profile_create` | `POST /subscription/connector-profiles` (CreateConnectorProfile) | | `mammoth support connector-profile delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_profile_delete` | `DELETE /subscription/connector-profiles/{profile_id}` (DeleteConnectorProfile) | | `mammoth support connector-profile update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_profile_update` | `PUT /subscription/connector-profiles/{profile_id}` (UpdateConnectorProfile) | | `mammoth support deal cancel-move-to-partner` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_cancel_move_to_partner` | `DELETE /support/deals/{deal_id}/move-to-partner` (SupportDealCancelMoveToPartner) | | `mammoth support deal create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_create` | `POST /support/deals` (SupportCreateDeal) | | `mammoth support deal move-to-partner` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_move_to_partner` | `POST /support/deals/{deal_id}/move-to-partner` (SupportDealMoveToPartner) | | `mammoth support deal opt-in` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_opt_in` | `POST /support/deals/{deal_id}/opt-in` (SupportDealOptIn) | | `mammoth support deal update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_update` | `PUT /support/deals/{deal_id}` (SupportUpdateDeal) | | `mammoth support feature create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_create` | `POST /subscription/features` (CreateFeature) | | `mammoth support feature delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_delete` | `DELETE /subscription/features/{feature_id}` (DeleteFeature) | | `mammoth support feature update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_update` | `PUT /subscription/features/{feature_id}` (UpdateFeature) | | `mammoth support feature-profile add-feature` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_profile_add_feature` | `POST /subscription/feature-profiles/{profile_id}/features` (AddFeatureToProfile) | | `mammoth support feature-profile create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_profile_create` | `POST /subscription/feature-profiles` (CreateFeatureProfile) | | `mammoth support feature-profile delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_profile_delete` | `DELETE /subscription/feature-profiles/{profile_id}` (DeleteFeatureProfile) | | `mammoth support feature-profile update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.feature_profile_update` | `PUT /subscription/feature-profiles/{profile_id}` (UpdateFeatureProfile) | | `mammoth support ownership transfer` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.ownership_transfer` | `PATCH /settings/users` (TransferOwnerships) | | `mammoth support partner charge-invoices` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_charge_invoices` | `POST /support/partners/{partner_id}/charge-invoices` (SupportChargePartnerInvoices) | | `mammoth support partner client cancel-detach` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_client_cancel_detach` | `DELETE /support/partners/{partner_id}/workspaces/{workspace_id}/detach` (SupportCancelDetachClient) | | `mammoth support partner client detach` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_client_detach` | `POST /support/partners/{partner_id}/workspaces/{workspace_id}/detach` (SupportDetachClient) | | `mammoth support partner create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_create` | `POST /support/partners` (SupportCreatePartner) | | `mammoth support partner send-payment-link` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_send_payment_link` | `POST /support/partners/{partner_id}/send-payment-link` (SupportSendPartnerPaymentLink) | | `mammoth support partner update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_update` | `PUT /support/partners/{partner_id}` (SupportUpdatePartner) | | `mammoth support plan archive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_archive` | `POST /subscription/plans/{plan_id}/archive` (ArchivePlan) | | `mammoth support plan create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_create` | `POST /subscription/plans` (CreatePlan) | | `mammoth support plan delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_delete` | `DELETE /subscription/plans/{plan_id}` (DeletePlan) | | `mammoth support plan storage-option archive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_storage_option_archive` | `DELETE /subscription/plans/{plan_id}/storage-options/{option_id}` (ArchiveStorageOption) | | `mammoth support plan storage-option create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_storage_option_create` | `POST /subscription/plans/{plan_id}/storage-options` (CreateStorageOption) | | `mammoth support plan storage-option update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_storage_option_update` | `PUT /subscription/plans/{plan_id}/storage-options/{option_id}` (UpdateStorageOption) | | `mammoth support plan unarchive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_unarchive` | `POST /subscription/plans/{plan_id}/unarchive` (UnarchivePlan) | | `mammoth support plan update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_update` | `PUT /subscription/plans/{plan_id}` (UpdatePlan) | | `mammoth support plan update-entitlements` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_update_entitlements` | `PUT /subscription/plans/{plan_id}/entitlements` (UpdatePlanEntitlements) | | `mammoth support plan update-storage-tiers` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_update_storage_tiers` | `PUT /subscription/plans/{plan_id}/storage-tiers` (UpdateStorageTiers) | | `mammoth support project-move purge` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.project_move_purge` | `POST /support/project-moves/{move_id}/purge` (PurgeProjectMove) | | `mammoth support subscription create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.subscription_create` | `POST /support/workspaces/{workspace_id}/sms` (RegisterSubscription) | | `mammoth support subscription update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.subscription_update` | `PATCH /support/workspaces/{workspace_id}/sms` (UpdateSubscription) | | `mammoth support template edit` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_edit` | `PATCH /dashboards/v3/templates/admin/{slug}` (DashboardV3AdminEditRow) | | `mammoth support template import` | `workspace` | High impact | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_import` | `POST /dashboards/v3/templates/admin/import` (DashboardV3AdminImportBundle) | | `mammoth support template publish` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_publish` | `POST /dashboards/v3/templates/admin/{slug}/publish` (DashboardV3AdminPublish) | | `mammoth support template retire` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_retire` | `POST /dashboards/v3/templates/admin/{slug}/retire` (DashboardV3AdminRetire) | | `mammoth support template thumbnail clear` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_thumbnail_clear` | `DELETE /dashboards/v3/templates/admin/{slug}/thumbnail` (DashboardV3AdminDeleteThumbnail) | | `mammoth support template thumbnail set` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_thumbnail_set` | `PUT /dashboards/v3/templates/admin/{slug}/thumbnail` (DashboardV3AdminPutThumbnail) | | `mammoth support template unpublish` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_unpublish` | `POST /dashboards/v3/templates/admin/{slug}/unpublish` (DashboardV3AdminUnpublish) | | `mammoth support user register` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.user_register` | `POST /support/users` (RegisterUser) | | `mammoth support user update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.user_update` | `PATCH /support/users` (UpdateUserVerification) | | `mammoth support workspace archive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `returns_job` | `none` | `mammoth.api.support.SupportAPI.workspace_archive` | `POST /support/workspaces/{workspace_id}/archive` (SupportWorkspaceArchive) | | `mammoth support workspace chargebee-cancelled` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_chargebee_cancelled` | `POST /support/workspaces/{workspace_id}/chargebee-cancelled` (SupportWorkspaceChargebeeCancelled) | | `mammoth support workspace create` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_create` | `POST /support/workspaces` (CreateWorkspaces) | | `mammoth support workspace delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_delete` | `DELETE /support/workspaces/{workspace_id}` (DeleteWorkspace) | | `mammoth support workspace invite cancel` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_invite_cancel` | `DELETE /support/workspaces/{workspace_id}/users/invites/{invite_id}` (SupportCancelWorkspaceInvite) | | `mammoth support workspace invite resend` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_invite_resend` | `POST /support/workspaces/{workspace_id}/users/invites/{invite_id}/resend` (SupportResendWorkspaceInvite) | | `mammoth support workspace project move-start` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.project_move_start` | `POST /support/workspaces/{workspace_id}/projects/{project_id}/move` (StartProjectMove) | | `mammoth support workspace restore-access` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_restore_access` | `POST /support/workspaces/{workspace_id}/restore-access` (RestoreWorkspaceAccess) | | `mammoth support workspace restore-archive` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `returns_job` | `none` | `mammoth.api.support.SupportAPI.workspace_restore_archive` | `POST /support/workspaces/{workspace_id}/restore` (SupportWorkspaceArchiveRestore) | | `mammoth support workspace suspend-access` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_suspend_access` | `POST /support/workspaces/{workspace_id}/suspend-access` (SuspendWorkspaceAccess) | | `mammoth support workspace update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_update` | `PATCH /support/workspaces/{workspace_id}` (UpdateWorkspaceDetail) | | `mammoth support workspace user add` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_user_add` | `POST /support/workspaces/{workspace_id}/users` (AddUserToWorkspace) | | `mammoth support workspace user remove` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_user_remove` | `DELETE /support/workspaces/{workspace_id}/users/{user_id}` (RemoveWorkspaceUser) | | `mammoth support workspace user transfer` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_user_transfer` | `PATCH /support/workspaces/{workspace_id}/users` (TransferUserRoles) | | `mammoth token create` | `profile` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | — | — | | `mammoth user delete-account` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.users.UsersAPI.delete_account` | `DELETE /self` (DeleteSelf) | | `mammoth workspace delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.delete` | `DELETE /workspaces/{workspace_id}` (DeleteUserWorkspace) | | `mammoth workspace export-hosts set` | `workspace` | High impact | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.set_export_hosts` | `PUT /workspaces/{workspace_id}/export-hosts` (Update) | | `mammoth workspace invite update-role` | `workspace` | High impact | `yes_always` | `--yes` | `not_async` | `none` | — | — | | `mammoth workspace oauth-client create` | `workspace` | High impact | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.oauth_clients.OAuthClientsAPI.create` | `POST /workspaces/{workspace_id}/oauth-clients` (CreateOauthClient) | | `mammoth workspace oauth-client delete` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.oauth_clients.OAuthClientsAPI.delete` | `DELETE /workspaces/{workspace_id}/oauth-clients/{oauth_client_id}` (DeleteOauthClient) | | `mammoth workspace oauth-client revoke-grant` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.oauth_clients.OAuthClientsAPI.revoke_grant` | `DELETE /workspaces/{workspace_id}/oauth-clients/{oauth_client_id}/grant` (RevokeOauthGrant) | | `mammoth workspace reactivate` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.reactivate` | `POST /workspaces/{workspace_id}/reactivate` (ReactivateWorkspace) | | `mammoth workspace update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.update` | `PATCH /workspaces/{workspace_id}` (UpdateWorkspace) | | `mammoth workspace user update` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.update_user` | `PATCH /workspaces/{workspace_id}/users/{user_id}` (UpdateUserInWorkspace) | | `mammoth workspace user update-batch` | `workspace` | High impact | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.user_update_batch` | `PATCH /workspaces/{workspace_id}/users` (UpdateUserToWorkspace) | | `mammoth agent access grant give` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_grant_give` | `POST /agents/access/grants` (GiveAgentAccess) | | `mammoth automation create` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations` (CreateAutomation) | | `mammoth automation update` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}` (UpdateAutomation) | | `mammoth collection dashboards add` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.add_dashboards` | `POST /collections/{collection_id}/dashboards` (AddDashboards) | | `mammoth collection email-updates set` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.set_email_updates` | `PUT /collections/{collection_id}/email-updates` (SaveCollectionEmailUpdates) | | `mammoth collection email-updates test` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.send_test_email_update` | `POST /collections/{collection_id}/email-updates/test` (TestCollectionEmailUpdate) | | `mammoth collection share` | `profile` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.share` | `POST /collections/{collection_id}/share` (ShareCollection) | | `mammoth connector connection create` | `workspace` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.create_connection` | `POST /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections` (SaveConnection) | | `mammoth connector connection update` | `workspace` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.update_connection` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}` (UpdateConnection) | | `mammoth connector ds-config create` | `workspace` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.create_ds_config` | `POST /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs` (ValidateAndGetDsConfig) | | `mammoth connector ds-config update` | `workspace` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.update_ds_config` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs/{ds_config_key}` (UpdateDsConfigs) | | `mammoth dashboard action` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | `mammoth.api.dashboards.DashboardsAPI.action` | `POST /dashboards/{dashboard_id}/action` (DashboardAction) | | `mammoth dashboard email-updates set` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_set` | `PUT /dashboards/{dashboard_id}/email-updates` (SaveDashboardEmailUpdates) | | `mammoth dashboard email-updates test` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_test` | `POST /dashboards/{dashboard_id}/email-updates/test` (TestDashboardEmailUpdate) | | `mammoth dashboard engagement remind` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.engagement_remind` | `POST /dashboards/{dashboard_id}/engagement/remind` (PostDashboardEngagementRemind) | | `mammoth dashboard share` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.share` | `POST /dashboards/{dashboard_id}/share` (ShareDashboard) | | `mammoth schedule create` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.schedules.SchedulesAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/schedules` (CreateSchedule) | | `mammoth schedule update` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.schedules.SchedulesAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/schedules/{schedule_id}` (PatchSchedule) | | `mammoth upgrade` | `profile` | External effect | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth view export azure-blob` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export bigquery` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export create` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | `mammoth.api.exports.ExportsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports` (AddExport) | | `mammoth view export delete` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.delete` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/{export_id}` (DeleteExport) | | `mammoth view export elasticsearch` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export email` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export ftp` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export live-link` | `project` | External effect | `yes_always` | `--yes` | `always_wait` | `none` | — | — | | `mammoth view export managed-s3` | `project` | External effect | `yes_always` | `--yes` | `always_wait` | `none` | — | — | | `mammoth view export mssql` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export mysql` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export onedrive` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export postgres` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export powerbi` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export publish-db` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.publish_db` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/publish-to-db` (CreatePublishToDb) | | `mammoth view export publish-db-update` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.publish_db_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/publish-to-db` (UpdatePublishToDb) | | `mammoth view export redshift` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export rest` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export rest-fill` | `project` | External effect | `yes_always` | `--yes` | `always_wait` | `none` | `mammoth.api.exports.ExportsAPI.rest_fill` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/rest-fill` (Suggest) | | `mammoth view export sftp` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export sharepoint` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export tableau` | `project` | External effect | `yes_always` | `--yes` | `returns_job` | `none` | — | — | | `mammoth view export update` | `project` | External effect | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/{export_id}` (EditExport) | | `mammoth view draft auto-run` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view draft enter` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view draft submit` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view exportable-config apply` | `project` | Reversible pipeline step | `confirm_target` | `--yes --confirm TARGET` | `returns_job` | `none` | `mammoth.api.dataviews.DataviewsAPI.apply_exportable_config` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/exportable-config` (ApplyExportableConfig) | | `mammoth view optimize` | `project` | Reversible pipeline step | `prompt_or_yes` | `--yes` | `start_or_wait` | `none` | `mammoth.api.dataviews.DataviewsAPI.optimize` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/optimize` (OptimizePipeline) | | `mammoth view task add` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.add_task` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks` (AddTask) | | `mammoth view task update` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.update_task` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks/{task_id}` (EditTask) | | `mammoth view transform add-column` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform add-sql` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform ai` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform batch` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform bulk-replace` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform combine-columns` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform convert-type` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform copy-columns` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform crosstab` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform date-diff` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform delete-columns` | `project` | Reversible pipeline step | `prompt_or_yes` | `--yes` | `always_wait` | `none` | — | — | | `mammoth view transform discard-duplicates` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform extract-date` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform fill-missing` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform filter` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform first-name` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform generate-sql` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform increment-date` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform join` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform json-extract` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform limit-rows` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform lookup` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform math` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform pivot` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform repeat-rows` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform replace` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform set-values` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform small-large` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform split` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform substring` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform text` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform unnest` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform update-column` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth view transform window` | `project` | Reversible pipeline step | `none` | — | `always_wait` | `none` | — | — | | `mammoth agent access chart save` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_chart_save` | `POST /agents/access/saved-charts` (SaveAgentChart) | | `mammoth agent access grant update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_grant_update` | `PATCH /agents/access/grants/{grant_id}` (ChangeAgentAccess) | | `mammoth agent access request add-to-context` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_request_add_to_context` | `POST /agents/access/requests/{request_id}/project-context` (AddAgentRequestToProjectContext) | | `mammoth agent access request create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_request_create` | `POST /agents/access/requests` (CreateAgentAccessRequest) | | `mammoth agent chat` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.chat` | `POST /agents/chat` (AgentChat) | | `mammoth agent message set-request-kind` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.message_set_request_kind` | `PATCH /agents/sessions/{session_id}/messages/{message_id}/request-kind` (CorrectAgentRequestKind) | | `mammoth agent plan approve` | `profile` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth agent plan discard` | `profile` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth agent plan edit-proposal` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.plan_edit_proposal` | `PATCH /agents/sessions/{session_id}/plan/proposal` (EditAgentPlanProposal) | | `mammoth agent plan skip` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth agent run extend` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_extend` | `POST /agents/sessions/{session_id}/runs/{run_id}/extend` (ExtendAgentRun) | | `mammoth agent run pause` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_pause` | `POST /agents/sessions/{session_id}/runs/{run_id}/pause` (PauseAgentRun) | | `mammoth agent run resume` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_resume` | `POST /agents/sessions/{session_id}/runs/{run_id}/resume` (ResumeAgentRun) | | `mammoth agent run retry` | `profile` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_retry` | `POST /agents/sessions/{session_id}/runs/{run_id}/retry` (RetryAgentRun) | | `mammoth agent run stop` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_stop` | `POST /agents/sessions/{session_id}/runs/{run_id}/stop` (StopAgentRun) | | `mammoth agent run units set` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_units_set` | `POST /agents/sessions/{session_id}/runs/{run_id}/units` (RegisterAgentRunUnits) | | `mammoth agent session set-visibility` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.session_set_visibility` | `PATCH /agents/sessions/{session_id}` (SetAgentSessionVisibility) | | `mammoth agent turn cancel` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.turn_cancel` | `POST /agents/sessions/{session_id}/turns/{turn_id}/cancel` (CancelAgentTurn) | | `mammoth agent turn rate` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.turn_rate` | `POST /agents/sessions/{session_id}/turns/{turn_id}/feedback` (RateAgentTurn) | | `mammoth ai retention condition` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | `mammoth.api.ai.AIAPI.retention_condition` | `POST /workspaces/{workspace_id}/projects/{project_id}/sql_generation/retention_policy` (RetentionCondition) | | `mammoth annotation comment add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.annotations.AnnotationsAPI.comment_add` | `POST /workspaces/{workspace_id}/projects/{project_id}/annotations/{annotation_id}/comments` (AddComment) | | `mammoth annotation create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.annotations.AnnotationsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/annotations` (CreateAnnotation) | | `mammoth annotation update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.annotations.AnnotationsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/annotations/{annotation_id}` (PatchAnnotation) | | `mammoth auth login` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth auth logout` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth automation restore` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.restore` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}/restore` (RestoreAutomation) | | `mammoth automation route order` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.set_route_order` | `PUT /workspaces/{workspace_id}/projects/{project_id}/automations/route-order` (SetRouteOrder) | | `mammoth automation run-file add-anyway` | `project` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.add_run_file_anyway` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations/run-files/{run_file_id}/add-anyway` (AddRunFileAnyway) | | `mammoth automation trash` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.trash` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}/trash` (TrashAutomation) | | `mammoth batch create` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | `mammoth.api.batches.BatchesAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches` (CreateBatch) | | `mammoth batch create-spec` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | — | — | | `mammoth batch update` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | `mammoth.api.batches.BatchesAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches` (UpdateBatches) | | `mammoth billing stripe recheck-limits` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_recheck_limits` | `POST /workspaces/{workspace_id}/subscription/recheck-limits` (RecheckWorkspaceLimits) | | `mammoth collection create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.create` | `POST /collections` (CreateCollection) | | `mammoth collection email-updates me set` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.set_my_email_updates` | `PUT /collections/{collection_id}/email-updates/me` (SetMyCollectionEmailUpdates) | | `mammoth collection files upload` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.upload_files` | `POST /collections/{collection_id}/files` (UploadFile) | | `mammoth collection update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.update` | `PATCH /collections/{collection_id}` (UpdateCollection) | | `mammoth completion install` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth config set` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth connector ai chat` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.chat` | `POST /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat` (Chat) | | `mammoth connector ai submit-column-selection` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.submit_column_selection` | `POST /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/column-selection` (SubmitColumnSelection) | | `mammoth connector ai submit-credentials` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.submit_credentials` | `POST /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/credentials` (SubmitCredentials) | | `mammoth connector connection test` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.test_connection` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/connections/{connection_key}/test` (TestConnection) | | `mammoth connector draft create` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts` (CreateConnectorDraft) | | `mammoth connector draft fill` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.fill` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/fill` (FillConnectorDraftGap) | | `mammoth connector draft open` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.open` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/open` (OpenConnectorDraftEntry) | | `mammoth connector draft read-tables` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.read_tables` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/read-tables` (ReadConnectorDraftTables) | | `mammoth connector draft sample` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.sample` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/sample` (ShapeConnectorDraftFromSample) | | `mammoth connector draft save` | `workspace` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.save` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/save` (StartConnectorDraftSave) | | `mammoth connector draft source preview` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.preview_source` | `POST /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/sources/{source_id}/preview` (PreviewConnectorDraftSource) | | `mammoth connector draft update` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}` (PatchConnectorDraft) | | `mammoth context project clear` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth context project use` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dashboard attachment-create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.attachment_create` | `POST /dashboards/v3/attachments` (CreateAttachment) | | `mammoth dashboard audience digest set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.audience_digest_set` | `PUT /dashboards/{dashboard_id}/audience/digest` (SetAudienceDigest) | | `mammoth dashboard cancel-generation` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.cancel_generation` | `POST /dashboards/{dashboard_id}/cancel-generation` (CancelDashboardGeneration) | | `mammoth dashboard canvas restore` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.canvas_restore` | `POST /dashboards/{dashboard_id}/canvas/restore` (RestoreCanvas) | | `mammoth dashboard canvas save` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.canvas_save` | `PUT /dashboards/{dashboard_id}/canvas` (SaveCanvas) | | `mammoth dashboard chart-type create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chart_type_create` | `POST /dashboards/v3/chart-types` (CreateWorkspaceChartType) | | `mammoth dashboard chat attachment upload` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chat_attachment_upload` | `POST /dashboards/{dashboard_id}/chat/attachments` (UploadChatAttachment) | | `mammoth dashboard chat edit` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.chat_edit` | `POST /dashboards/{dashboard_id}/chat` (ChatEdit) | | `mammoth dashboard context apply` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_apply` | `POST /dashboards/{dashboard_id}/context-review/{review_id}/apply` (ApplyContextReview) | | `mammoth dashboard context create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_create` | `POST /dashboards/v3/contexts` (CreateContext) | | `mammoth dashboard context extract` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.extract_context` | `POST /dashboards/v3/contexts/extract` (ExtractContext) | | `mammoth dashboard context update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_update` | `PUT /dashboards/v3/contexts/{context_id}` (UpdateContext) | | `mammoth dashboard create-blank` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.create_blank` | `POST /dashboards/v3/blank` (CreateBlankDashboard) | | `mammoth dashboard descriptor-data` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.descriptor_data` | `POST /dashboards/{dashboard_id}/data` (DescriptorData) | | `mammoth dashboard duplicate` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.duplicate` | `POST /dashboards/v3/{dashboard_id}/duplicate` (DuplicateDashboard) | | `mammoth dashboard email-updates me set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_me_set` | `PUT /dashboards/{dashboard_id}/email-updates/me` (SetMyDashboardEmailUpdates) | | `mammoth dashboard embed lifetime set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_lifetime_set` | `PUT /workspaces/{workspace_id}/embed/lifetime` (SetEmbedLifetime) | | `mammoth dashboard embed preview-token create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_preview_token_create` | `POST /dashboards/{dashboard_id}/embed/preview-token` (PreviewToken) | | `mammoth dashboard exemplar extract` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.extract_exemplar` | `POST /dashboards/v3/exemplar/extract` (ExtractExemplar) | | `mammoth dashboard figure add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.append_figure` | `POST /dashboards/{dashboard_id}/figures` (AppendFigure) | | `mammoth dashboard figure-intent` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.figure_intent` | `POST /dashboards/{dashboard_id}/figure-intent` (FigureIntent) | | `mammoth dashboard filter add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dashboard filter remove` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dashboard live-chart create` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_create` | `POST /dashboards/v3/live-charts` (CreateLiveChart) | | `mammoth dashboard live-chart placement` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_placement` | `POST /dashboards/v3/live-charts/{dashboard_id}/placements` (RecordPlacement) | | `mammoth dashboard own-data accept` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_accept` | `POST /dashboards/v3/{dashboard_id}/own-data/accept` (AcceptOwnData) | | `mammoth dashboard own-data dismiss` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_dismiss` | `POST /dashboards/v3/{dashboard_id}/own-data/dismiss` (DismissOwnData) | | `mammoth dashboard own-data start` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_start` | `POST /dashboards/v3/{dashboard_id}/own-data` (StartOwnData) | | `mammoth dashboard page plan` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.page_plan` | `POST /dashboards/{dashboard_id}/plan-page` (PlanPage) | | `mammoth dashboard pdf export` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.pdf_export` | `POST /dashboards/{dashboard_id}/pdf` (ExportPdf) | | `mammoth dashboard published data` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_data` | `POST /dashboards/url/{url}/data` (DescriptorDataByUrl) | | `mammoth dashboard published pdf export` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_pdf_export` | `POST /dashboards/url/{url}/pdf` (ExportPdfByUrl) | | `mammoth dashboard published video export` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_video_export` | `POST /dashboards/url/{url}/video` (ExportVideoByUrl) | | `mammoth dashboard published-data-by-url` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_data_by_url` | `POST /dashboards/url/{url}/getPublishData` (GetPublishDataFromSqlByUrl) | | `mammoth dashboard qa ask` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_ask` | `POST /dashboards/{dashboard_id}/qa/sessions/{session_id}/ask` (Ask) | | `mammoth dashboard qa comment create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_comment_create` | `POST /dashboards/{dashboard_id}/qa/sessions/{session_id}/comments` (DashboardV3AddComment) | | `mammoth dashboard qa feedback` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_feedback` | `POST /dashboards/{dashboard_id}/qa/sessions/{session_id}/messages/{message_id}/feedback` (DashboardV3QaFeedback) | | `mammoth dashboard qa session create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_create` | `POST /dashboards/{dashboard_id}/qa/sessions` (CreateSession) | | `mammoth dashboard qa session fork` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_fork` | `POST /dashboards/{dashboard_id}/qa/sessions/{session_id}/fork` (ForkSession) | | `mammoth dashboard qa session rename` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_rename` | `PUT /dashboards/{dashboard_id}/qa/sessions/{session_id}/title` (RenameSession) | | `mammoth dashboard qa session set-visibility` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_set_visibility` | `PUT /dashboards/{dashboard_id}/qa/sessions/{session_id}/visibility` (DashboardV3SetVisibility) | | `mammoth dashboard qa settings set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_settings_set` | `PUT /dashboards/{dashboard_id}/qa/settings` (DashboardV3SetQaSettings) | | `mammoth dashboard query` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.query` | `POST /dashboards/{dashboard_id}/query` (AdhocQuery) | | `mammoth dashboard restore` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.restore` | `POST /dashboards/{dashboard_id}/restore` (RestoreDashboard) | | `mammoth dashboard rls assignment set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.rls_assignment_set` | `PUT /dashboards/{dashboard_id}/rls/assignments` (SetRlsAssignments) | | `mammoth dashboard signature create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.signature_create` | `POST /dashboards/v3/signatures` (CreateSignature) | | `mammoth dashboard signature update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.signature_update` | `PUT /dashboards/v3/signatures/{signature_id}` (UpdateSignature) | | `mammoth dashboard style custom create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_custom_create` | `POST /dashboards/v3/styles/custom` (CreateCustomStyle) | | `mammoth dashboard style custom update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_custom_update` | `PUT /dashboards/v3/styles/custom/{style_id}` (UpdateCustomStyle) | | `mammoth dashboard style default set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_default_set` | `PUT /dashboards/v3/styles/default` (SetDefaultStyle) | | `mammoth dashboard style derive` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_derive` | `POST /dashboards/v3/styles/derive` (DeriveStyle) | | `mammoth dashboard style extract-brand` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_extract_brand` | `POST /dashboards/v3/styles/extract-brand` (ExtractBrand) | | `mammoth dashboard swap-data` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.swap_data` | `POST /dashboards/v3/{dashboard_id}/swap-data` (SwapDashboardData) | | `mammoth dashboard tags rename` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.rename_tag` | `PATCH /dashboards/tags/{tag_id}` (RenameDashboardTag) | | `mammoth dashboard template apply` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_apply` | `POST /dashboards/v3/templates/apply` (ApplyTemplate) | | `mammoth dashboard template create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_create` | `POST /dashboards/v3/templates` (SaveTemplate) | | `mammoth dashboard template preview` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_preview` | `POST /dashboards/v3/templates/preview` (PreviewTemplate) | | `mammoth dashboard template rename` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_rename` | `PATCH /dashboards/v3/templates/{template_id}` (RenameTemplate) | | `mammoth dashboard template resolve-mapping` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_resolve_mapping` | `POST /dashboards/v3/templates/resolve-mapping` (ResolveTemplateMapping) | | `mammoth dashboard template thumbnail set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_thumbnail_set` | `PUT /dashboards/v3/templates/{slug}/thumbnail` (DashboardV3PutTemplateThumbnail) | | `mammoth dashboard templates pending` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.take_pending_template` | `POST /dashboards/v3/templates/pending` (DashboardV3TakePendingTemplate) | | `mammoth dashboard trash` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.trash` | `POST /dashboards/{dashboard_id}/trash` (TrashDashboard) | | `mammoth dashboard update` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | `mammoth.api.dashboards.DashboardsAPI.update` | `PATCH /dashboards/{dashboard_id}` (EditDashboard) | | `mammoth dashboard v3 generate` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.v3_generate` | `POST /dashboards/v3/generate` (GenerateDashboardV3) | | `mammoth dashboard video export` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.video_export` | `POST /dashboards/{dashboard_id}/video` (ExportVideo) | | `mammoth dashboard widget-data` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.widget_data` | `POST /dashboards/{dashboard_id}/widgets/data` (BulkWidgetData) | | `mammoth dashboard widget-data-by-url` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.widget_data_by_url` | `POST /dashboards/url/{url}/widgets/data` (BulkWidgetDataByUrl) | | `mammoth dataset create` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.datasets.DatasetsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets` (CreateDatasets) | | `mammoth dataset create-from-pdf` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.create_from_pdf` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets-from-pdf` (CreateDatasetFromPdf) | | `mammoth dataset definition add` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.add_definition` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/definitions` (AddDatasetDefinition) | | `mammoth dataset definition remove` | `project` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.remove_definition` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/definitions/{definition_id}` (RemoveDatasetDefinition) | | `mammoth dataset download` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth dataset file-settings update` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.datasets.DatasetsAPI.file_settings_update` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/file_settings` (UpdateFileSettings) | | `mammoth dataset from-url follow` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset interpretation confirm` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.interpretation_confirm` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/interpretation` (ConfirmDatasetInterpretation) | | `mammoth dataset interpretation preview` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.interpretation_preview` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/interpretation/preview` (PreviewDatasetInterpretation) | | `mammoth dataset refresh` | `project` | Benign mutation | `prompt_or_yes` | `--yes` | `always_wait` | `none` | — | — | | `mammoth dataset rename` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset restore` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.restore` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/restore` (RestoreDataset) | | `mammoth dataset tool-claim redeem` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.tool_claim_redeem` | `POST /workspaces/{workspace_id}/projects/{project_id}/tool-claims` (RedeemToolClaim) | | `mammoth dataset trash` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.trash` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/trash` (TrashDataset) | | `mammoth dataset update-method set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth file extract-sheets` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth file multi-sheet-extract` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.files.FilesAPI.create_datasets_from_multi_sheet` | `POST /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}/multi-sheet-extraction` (CreateDatasetsFromMultiSheetFile) | | `mammoth file multi-sheet-preview` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.files.FilesAPI.preview_multi_sheet` | `POST /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}/sheets/interpretation/preview` (PreviewMultiSheetInterpretation) | | `mammoth file update` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.files.FilesAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}` (UpdateFileConfigs) | | `mammoth file upload` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | `mammoth.api.files.FilesAPI.upload` | `POST /workspaces/{workspace_id}/projects/{project_id}/files` (CreateFileDataset) | | `mammoth file upload-folder` | `project` | Benign mutation | `none` | — | `start_or_wait` | `none` | — | — | | `mammoth folder create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/folders` (CreateFolder) | | `mammoth folder move` | `project` | Benign mutation | `none` | — | `returns_job` | `none` | `mammoth.api.folders.FoldersAPI.move` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/folders` (UpdateFolderResources) | | `mammoth folder trash` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.folders.FoldersAPI.trash` | `POST /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}/trash` (TrashFolder) | | `mammoth folder update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}` (UpdateFolderDetails) | | `mammoth notification update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.notifications.NotificationsAPI.update` | `PATCH /notifications/{notification_id}` (EditNotification) | | `mammoth notification update-batch` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.notifications.NotificationsAPI.update_batch` | `PATCH /notifications` (EditNotifications) | | `mammoth parameter create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.create` | `POST /workspaces/{workspace_id}/parameters` (CreateParameter) | | `mammoth parameter duplicate` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.duplicate` | `POST /workspaces/{workspace_id}/parameters/{parameter_id}/duplicate` (DuplicateParameter) | | `mammoth parameter group create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.group_create` | `POST /workspaces/{workspace_id}/parameters/groups` (CreateGroup) | | `mammoth parameter group reorder` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.group_reorder` | `POST /workspaces/{workspace_id}/parameters/groups/reorder` (ReorderGroups) | | `mammoth parameter group update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.group_update` | `PATCH /workspaces/{workspace_id}/parameters/groups/{group_id}` (UpdateGroup) | | `mammoth parameter rerun` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.rerun` | `POST /workspaces/{workspace_id}/parameters/{parameter_id}/rerun` (RerunParameter) | | `mammoth parameter rerun-all-stale` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.rerun_all_stale` | `POST /workspaces/{workspace_id}/parameters/rerun-all-stale` (RerunAllStale) | | `mammoth parameter update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.update` | `PATCH /workspaces/{workspace_id}/parameters/{parameter_id}` (UpdateParameter) | | `mammoth project copy` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.projects.ProjectsAPI.copy` | `POST /workspaces/{workspace_id}/projects/{project_id}/copy` (CopyProject) | | `mammoth project create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.create` | `POST /workspaces/{workspace_id}/projects` (CreateProject) | | `mammoth project ensure` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth project memory add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth project memory remove` | `project` | Benign mutation | `prompt_or_yes` | `--yes` | `not_async` | `none` | — | — | | `mammoth project sample-flow` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.sample_flow` | `POST /workspaces/{workspace_id}/projects/{project_id}/sample-flow` (CreateSampleFlow) | | `mammoth project update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}` (UpdateProject) | | `mammoth skill agents-md install` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth skill install` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth skill uninstall` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth skill update` | `local` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth snippet create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.create` | `POST /workspaces/{workspace_id}/snippets` (CreateSnippet) | | `mammoth snippet duplicate` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.duplicate` | `POST /workspaces/{workspace_id}/snippets/{snippet_id}/duplicate` (DuplicateSnippet) | | `mammoth snippet rerun` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.rerun` | `POST /workspaces/{workspace_id}/snippets/{snippet_id}/rerun` (RerunSnippet) | | `mammoth snippet update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.update` | `PATCH /workspaces/{workspace_id}/snippets/{snippet_id}` (UpdateSnippet) | | `mammoth template create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.templates.TemplatesAPI.create` | `POST /workspaces/{workspace_id}/templates` (CreateTemplate) | | `mammoth template update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.templates.TemplatesAPI.update` | `PATCH /workspaces/{workspace_id}/templates/{template_id}` (UpdateTemplate) | | `mammoth trash add` | `profile` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.trash.TrashAPI.add` | `POST /workspaces/{workspace_id}/projects/{project_id}/trash` (BulkTrash) | | `mammoth trash restore` | `profile` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.trash.TrashAPI.restore` | `POST /workspaces/{workspace_id}/projects/{project_id}/trash/restore` (BulkRestore) | | `mammoth user avatar upload` | `workspace` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.users.UsersAPI.avatar_upload` | `POST /self/avatar` (UploadProfilePic) | | `mammoth user preference update` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.update_preferences` | `PATCH /preferences` (UpdateUserPreferences) | | `mammoth user update` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.update` | `PATCH /self` (UpdateUser) | | `mammoth view active-user mark` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.mark_active` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/activities` (MarkActiveUser) | | `mammoth view ai generate-data` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.generate_data` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data/generate` (Preview) | | `mammoth view ai profile` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.generate_profile` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/profile_generation` (GenerateProfile) | | `mammoth view checkpoint create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.checkpoints.CheckpointsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints` (AddCheckpoint) | | `mammoth view checkpoint update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.checkpoints.CheckpointsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints/{checkpoint_id}` (EditPatches) | | `mammoth view column format set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view conditional-format create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.conditional_format_create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/conditional-format` (CreateConditionalFormat) | | `mammoth view conditional-format update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.conditional_format_update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/conditional-format` (UpdateConditionalFormat) | | `mammoth view create` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.client.ViewsResource.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews` (AddDataview) | | `mammoth view data-check create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.data_checks.DataChecksAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks` (AddDataCheck) | | `mammoth view data-check update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.data_checks.DataChecksAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks/{data_check_id}` (EditDatacheck) | | `mammoth view derivative create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.derivatives.DerivativesAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives` (CreateDerivative) | | `mammoth view derivative data` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.derivatives.DerivativesAPI.data` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives/{derivative_id}/data` (FetchDerivativeData) | | `mammoth view derivative update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.derivatives.DerivativesAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives/{derivative_id}` (EditDerivative) | | `mammoth view draft command` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.command` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/draft-mode` (ExecutePipelineDraftCommand) | | `mammoth view explore-panel add-to-dashboard` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view explore-panel edit` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view explore-panel set` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view export csv` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth view export dataset` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth view export download` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth view pipeline edit` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.edit_pipeline` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline` (EditPipeline) | | `mammoth view pipeline rerun` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.rerun` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/rerun` (RerunFromSequence) | | `mammoth view restore` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.restore` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/restore` (RestoreDataview) | | `mammoth view task preview-cancel` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.preview_cancel` | `DELETE /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/task_preview/{job_id}` (CancelTaskPreview) | | `mammoth view transform rename-columns` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view transform sort` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth view trash` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.trash` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/trash` (TrashDataview) | | `mammoth view update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}` (Patch) | | `mammoth view variants create` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | — | — | | `mammoth view version apply` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.apply` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions/{version_id}` (ApplyPipelineVersion) | | `mammoth view version update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions/{version_id}` (EditPipelineVersion) | | `mammoth webhook create` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/webhooks` (CreateAWebhook) | | `mammoth webhook send` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.send_data` | `POST /webhooks/data/{webhook_uri}` (AddDataToWebhook) | | `mammoth webhook send-get` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.send_data_get` | `GET /webhooks/data/{webhook_uri}` (AddDataToWebhookUsingGetMethod) | | `mammoth webhook update` | `profile` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/webhooks/{webhook_id}` (UpdateWebhookConfigurations) | | `mammoth workflow archive` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.set_archived` | `PUT /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/archived` (SetArchived) | | `mammoth workflow attach-dataset` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.attach_dataset` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/datasets` (AttachDataset) | | `mammoth workflow block add` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.block_add` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/blocks` (AddSkeletonBlock) | | `mammoth workflow block auth` | `project` | Benign mutation | `confirm_target` | `--yes --confirm TARGET` | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.block_auth` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/blocks/{block_id}/auth` (PatchBlockAuth) | | `mammoth workflow block config` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.block_config` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/blocks/{block_id}/config` (PromoteSkeletonBlock) | | `mammoth workflow block type` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.block_type` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/blocks/{block_id}/type` (PatchBlockType) | | `mammoth workflow canvas` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.canvas` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/canvas` (UpdateCanvasState) | | `mammoth workflow create` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.create` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows` (CreateWorkflow) | | `mammoth workflow duplicate` | `project` | Benign mutation | `none` | — | `always_wait` | `none` | `mammoth.api.workflows.WorkflowsAPI.duplicate` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/duplicate` (DuplicateWorkflow) | | `mammoth workflow from-template` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.from_template` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/from-template` (InstantiateFromTemplate) | | `mammoth workflow resolve-held` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.resolve_held` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/held/resolve` (ResolveHeldChange) | | `mammoth workflow save` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.save` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/save` (SaveWorkflow) | | `mammoth workflow save-cancel-step` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.cancel_save_step` | `POST /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}/save/{run_id}/steps/{step}/cancel` (CancelWorkflowSaveStep) | | `mammoth workflow template build` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template samples` | `project` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow update` | `project` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.update` | `PATCH /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}` (UpdateWorkflow) | | `mammoth workspace accept-invite` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.accept_invite` | `POST /accept-invite` (AcceptInvite) | | `mammoth workspace check-expression` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.check_expression` | `POST /workspaces/{workspace_id}/ai/check-expression` (GenerateCheckExpression) | | `mammoth workspace create` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.create` | `POST /workspaces` (CreateWorkspace) | | `mammoth workspace invite resend` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | — | — | | `mammoth workspace llm-task` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.llm_task` | `POST /workspaces/{workspace_id}/llm` (RunLlmTask) | | `mammoth workspace segment update` | `workspace` | Benign mutation | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.segment_update` | `PATCH /workspaces/{workspace_id}/split-segments` (UpdateSegments) | | `mammoth workspace user add` | `workspace` | Benign mutation | `yes_always` | `--yes` | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.user_add` | `POST /workspaces/{workspace_id}/users` (AddUserInWorkspace) | | `mammoth activity export` | `profile` | Read | `none` | — | `returns_job` | `none` | `mammoth.api.activity_logs.ActivityLogsAPI.export` | `POST /workspaces/{workspace_id}/activity_log/export` (ExportActivityLogs) | | `mammoth activity list` | `profile` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.activity_logs.ActivityLogsAPI.list` | `POST /workspaces/{workspace_id}/activity_log` (GetActivityLogs) | | `mammoth agent access askers` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_project_askers` | `GET /agents/access/projects/{project_id}/askers` (GetAgentProjectAskers) | | `mammoth agent access grant list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_grants_list` | `GET /agents/access/grants` (ListAgentGrants) | | `mammoth agent access me` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_me` | `GET /agents/access/me` (GetAgentAccessMe) | | `mammoth agent access people` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_people` | `GET /agents/access/people` (ListAgentPeople) | | `mammoth agent access reach` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_reach` | `GET /agents/access/reach` (GetAgentAccessReach) | | `mammoth agent access request list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_requests_list` | `GET /agents/access/requests` (ListAgentAccessRequests) | | `mammoth agent access request mine` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_requests_mine` | `GET /agents/access/requests/mine` (ListMyAgentAccessRequests) | | `mammoth agent access settings get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_settings_get` | `GET /agents/access/settings` (GetAgentSettings) | | `mammoth agent access tree` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.access_tree` | `GET /agents/access/tree` (GetAgentAccessTree) | | `mammoth agent action list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.action_list` | `GET /agents/sessions/{session_id}/actions` (ListAgentSessionActions) | | `mammoth agent run instance list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_instances_list` | `GET /agents/sessions/{session_id}/runs/{run_id}/instances` (ListAgentRunInstances) | | `mammoth agent run instance messages` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_instance_messages` | `GET /agents/sessions/{session_id}/runs/{run_id}/instances/{instance_id}/messages` (ListAgentInstanceMessages) | | `mammoth agent run instance transcript` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_instance_transcript` | `GET /agents/sessions/{session_id}/runs/{run_id}/instances/{instance_id}/transcript` (GetAgentInstanceTranscript) | | `mammoth agent run list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_list` | `GET /agents/sessions/{session_id}/runs` (ListAgentSessionRuns) | | `mammoth agent run status` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_status` | `GET /agents/sessions/{session_id}/run` (GetAgentSessionRun) | | `mammoth agent run units list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.run_units_list` | `GET /agents/sessions/{session_id}/runs/{run_id}/units` (ListAgentRunUnits) | | `mammoth agent session feedback list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.turn_feedback_list` | `GET /agents/sessions/{session_id}/feedback` (ListAgentTurnFeedback) | | `mammoth agent session list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.agents.AgentsAPI.session_list` | `GET /agents/sessions` (ListAgentSessions) | | `mammoth agent session messages` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.agents.AgentsAPI.session_messages` | `GET /agents/sessions/{session_id}/messages` (GetAgentSessionMessages) | | `mammoth ai condition generate` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.ai.AIAPI.condition_generate` | `POST /workspaces/{workspace_id}/projects/{project_id}/sql_generation/condition` (GenerateCondition) | | `mammoth ai expression generate` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.ai.AIAPI.expression_generate` | `POST /workspaces/{workspace_id}/projects/{project_id}/sql_generation/expression` (GenerateExpression) | | `mammoth ai sql generate` | `profile` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.generate_sql` | `POST /workspaces/{workspace_id}/projects/{project_id}/sql_generation` (GenerateSql) | | `mammoth ai suggestion list` | `profile` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.get_suggestions` | `POST /workspaces/{workspace_id}/projects/{project_id}/suggestions` (AiSuggestions) | | `mammoth annotation list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.annotations.AnnotationsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/annotations` (ListAnnotations) | | `mammoth auth connected-apps list` | `local` | Read | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.connected_apps` | `GET /self/oauth-grants` (ListConnectedApps) | | `mammoth auth status` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth automation capabilities` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.capabilities` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations/capabilities` (GetAutomationCapabilities) | | `mammoth automation folders` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.watched_folders` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations/folders` (GetWatchedFolders) | | `mammoth automation get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}` (GetAutomation) | | `mammoth automation list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.automations.AutomationsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations` (GetList) | | `mammoth automation route preview` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.preview_routes` | `POST /workspaces/{workspace_id}/projects/{project_id}/automations/route-preview` (PreviewRoutes) | | `mammoth automation runs` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.automations.AutomationsAPI.runs` | `GET /workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}/runs` (GetAutomationRuns) | | `mammoth batch get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.batches.BatchesAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches/{batch_id}` (GetBatch) | | `mammoth batch list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.batches.BatchesAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches` (GetBatches) | | `mammoth billing chargebee-plan` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.chargebee_plan` | `GET /workspaces/{workspace_id}/chargebee-plan` (GetChargebeePlan) | | `mammoth billing invoice list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | — | — | | `mammoth billing stripe get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_get` | `GET /workspaces/{workspace_id}/subscription` (GetWorkspaceSubscription) | | `mammoth billing stripe held-change get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_held_change_get` | `GET /workspaces/{workspace_id}/subscription/held-change` (GetHeldChange) | | `mammoth billing stripe history` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_history` | `GET /workspaces/{workspace_id}/subscription/billing-history` (GetWorkspaceBillingHistory) | | `mammoth billing stripe payment-method list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.billing.BillingAPI.stripe_payment_method_list` | `GET /workspaces/{workspace_id}/subscription/payment-methods` (GetPaymentMethods) | | `mammoth billing stripe preview-invoice` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_preview_invoice` | `GET /workspaces/{workspace_id}/subscription/preview-invoice` (PreviewInvoice) | | `mammoth billing stripe status` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_status` | `GET /workspaces/{workspace_id}/subscription/status` (GetWorkspaceSubscriptionStatus) | | `mammoth billing stripe upcoming-invoice` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_upcoming_invoice` | `GET /workspaces/{workspace_id}/subscription/upcoming-invoice` (GetUpcomingInvoice) | | `mammoth billing stripe usage` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.stripe_usage` | `GET /workspaces/{workspace_id}/subscription/usage` (GetWorkspaceUsage) | | `mammoth billing subscription get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.billing.BillingAPI.subscription_get` | `GET /workspaces/{workspace_id}/subscription_v1` (GetWkspSubscriptionDetail) | | `mammoth browse ancestors` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.browse.BrowseAPI.resource_ancestors` | `GET /workspaces/{workspace_id}/projects/{project_id}/resources/ancestors` (GetResourceAncestors) | | `mammoth browse folder` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.browse.BrowseAPI.folder_resources` | `GET /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}/browse` (BrowseFolderFolders) | | `mammoth browse project` | `profile` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.projects.ProjectsAPI.browse` | `GET /workspaces/{workspace_id}/projects/{project_id}/browse` (BrowseProjectProjects) | | `mammoth browse resource` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.browse.BrowseAPI.resource_get` | `GET /workspaces/{workspace_id}/projects/{project_id}/resources/{resource_type}/{object_id}` (GetResource) | | `mammoth browse resources` | `profile` | Read | `none` | — | `not_async` | `cursor` | `mammoth.api.browse.BrowseAPI.resources_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/resources` (ListResources) | | `mammoth browse resources bulk` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.browse.BrowseAPI.resources_bulk` | `POST /workspaces/{workspace_id}/projects/{project_id}/resources/bulk` (BulkGetResources) | | `mammoth browse root` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.browse.BrowseAPI.root` | `GET /browse` (BrowseResources) | | `mammoth browse search` | `profile` | Read | `none` | — | `not_async` | `cursor` | `mammoth.api.browse.BrowseAPI.resources_search` | `GET /workspaces/{workspace_id}/resources` (SearchResources) | | `mammoth browse workspace` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.browse.BrowseAPI.workspace_resources` | `GET /workspaces/{workspace_id}/browse` (BrowseWorkspaceWorkspaces) | | `mammoth calc` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth capabilities` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth capability find` | `local` | Read | `none` | — | `not_async` | `offset` | — | — | | `mammoth capability get` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth capability list` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth client-app get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.clientapps.ClientAppsAPI.get` | `GET /workspaces/{workspace_id}/clientapps/{client_key}` (AppDetails) | | `mammoth client-app list` | `workspace` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.clientapps.ClientAppsAPI.list` | `GET /workspaces/{workspace_id}/clientapps` (ListApps) | | `mammoth collection active-job` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.active_job` | `GET /collections/{collection_id}/active-job` (ActiveJob) | | `mammoth collection activity` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.activity` | `GET /collections/{collection_id}/activity` (CollectionActivity) | | `mammoth collection email-updates get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.email_updates` | `GET /collections/{collection_id}/email-updates` (GetCollectionEmailUpdates) | | `mammoth collection email-updates me get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.my_email_updates` | `GET /collections/{collection_id}/email-updates/me` (GetMyCollectionEmailUpdates) | | `mammoth collection for-dashboard` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.for_dashboard` | `GET /collections/for-dashboard/{dashboard_id}` (CollectionsForDashboard) | | `mammoth collection get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.get` | `GET /collections/{collection_id}` (GetCollection) | | `mammoth collection get-by-url` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.get_by_url` | `GET /collections/url/{url}` (GetCollectionByUrl) | | `mammoth collection job` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.job` | `GET /collections/{collection_id}/jobs/{job_id}` (GetRefreshJob) | | `mammoth collection list` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.list` | `GET /collections` (ListCollections) | | `mammoth collection pipeline-changes` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.collections.CollectionsAPI.pipeline_changes` | `GET /collections/{collection_id}/pipeline-changes` (PipelineChanges) | | `mammoth completion show` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth config get` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth config list` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth config path` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth connector active` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.active_connectors` | `GET /workspaces/{workspace_id}/active_connectors` (GetActiveConnectors) | | `mammoth connector ai history` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.history` | `GET /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/history` (GetChatHistory) | | `mammoth connector ai session list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connector_ai.ConnectorAIAPI.session_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/sessions` (ListSessions) | | `mammoth connector ai session messages` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_ai.ConnectorAIAPI.session_messages` | `GET /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/sessions/{session_id}/messages` (GetSessionMessages) | | `mammoth connector connection get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.get_connection` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}` (GetConnection) | | `mammoth connector connection list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.list_connections` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections` (ListConnections) | | `mammoth connector connection list-all` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.list_all_connections` | `GET /workspaces/{workspace_id}/projects/{project_id}/connections` (ListAllConnections) | | `mammoth connector connection query` | `workspace` | Read | `none` | — | `not_async` | `single_page` | — | — | | `mammoth connector draft browse` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.browse` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/browse` (BrowseConnectorDraftFolderConnectorDrafts) | | `mammoth connector draft get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}` (GetConnectorDraft) | | `mammoth connector draft known-sources` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.known_sources` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/known-sources` (ListConnectorKnownSources) | | `mammoth connector draft list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts` (ListConnectorDrafts) | | `mammoth connector draft source join-candidates` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.join_candidates` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/sources/{source_id}/join-candidates` (ListConnectorDraftJoinCandidates) | | `mammoth connector draft source list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connector_drafts.ConnectorDraftsAPI.sources` | `GET /workspaces/{workspace_id}/projects/{project_id}/connector-drafts/{draft_id}/sources` (ListConnectorDraftSources) | | `mammoth connector ds-config get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.get_ds_config` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs/{ds_config_key}` (GetDsConfig) | | `mammoth connector ds-config list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.list_ds_configs` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/ds_configs` (ListDsConfigs) | | `mammoth connector get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.connectors.ConnectorsAPI.get` | `GET /workspaces/{workspace_id}/connectors/{connector_key}` (GetConnector) | | `mammoth connector list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.connectors.ConnectorsAPI.list` | `GET /workspaces/{workspace_id}/connectors` (ListWorkspaceConnectors) | | `mammoth connector query generate` | `workspace` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.ai.AIAPI.query_gen` | `POST /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/chat` (GetQuerySuggestion) | | `mammoth connector query status` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.ai.AIAPI.status` | `GET /workspaces/{workspace_id}/projects/{project_id}/connectors/{connector_key}/connections/{connection_key}/chat` (GetChatStatus) | | `mammoth context project status` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth context show` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dashboard analytics` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.get_analytics` | `GET /dashboards/{dashboard_id}/analytics` (GetDashboardAnalytics) | | `mammoth dashboard assess-pbix` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.assess_pbix` | `POST /dashboards/v3/pbix/assess` (AssessPbix) | | `mammoth dashboard assess-twb` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.assess_twb` | `POST /dashboards/v3/twb/assess` (AssessTwb) | | `mammoth dashboard audience digest get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.audience_digest_get` | `GET /dashboards/{dashboard_id}/audience/digest` (GetAudienceDigest) | | `mammoth dashboard audience get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.audience` | `GET /dashboards/{dashboard_id}/audience` (GetDashboardAudience) | | `mammoth dashboard audience summary` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.audience_summary` | `GET /workspaces/{workspace_id}/dashboards/audience-summary` (AudienceSummary) | | `mammoth dashboard bi-export` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.export_powerbi` | `GET /dashboards/{dashboard_id}/tableau/export` (TableauExport) | | `mammoth dashboard bi-preflight` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.powerbi_preflight` | `GET /dashboards/{dashboard_id}/tableau` (TableauPreflightHandler) | | `mammoth dashboard canvas get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.canvas_get` | `GET /dashboards/{dashboard_id}/canvas` (GetCanvasDraft) | | `mammoth dashboard chart-type list` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chart_type_list` | `GET /dashboards/v3/chart-types` (ListWorkspaceChartTypes) | | `mammoth dashboard chat history` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.chat_history` | `GET /dashboards/{dashboard_id}/chat` (DashboardV3ChatHistory) | | `mammoth dashboard columns` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.column_roster` | `GET /dashboards/{dashboard_id}/columns` (GetColumnRoster) | | `mammoth dashboard context list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.context_list` | `GET /dashboards/v3/contexts` (ListContexts) | | `mammoth dashboard context review` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.context_review` | `POST /dashboards/{dashboard_id}/context-review` (ReviewContext) | | `mammoth dashboard data draft` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.get_draft_data` | `POST /dashboards/{dashboard_id}/getDraftData` (GetDraftDataFromSql) | | `mammoth dashboard data published` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.get_publish_data` | `POST /dashboards/{dashboard_id}/getPublishData` (GetPublishDataFromSql) | | `mammoth dashboard email-updates get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_get` | `GET /dashboards/{dashboard_id}/email-updates` (GetDashboardEmailUpdates) | | `mammoth dashboard email-updates list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.email_updates_list` | `GET /dashboards/email-updates` (ListWorkspaceEmailUpdates) | | `mammoth dashboard email-updates me get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.email_updates_me_get` | `GET /dashboards/{dashboard_id}/email-updates/me` (GetMyDashboardEmailUpdates) | | `mammoth dashboard embed config get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_config_get` | `GET /dashboards/{dashboard_id}/embed/config` (GetEmbedConfig) | | `mammoth dashboard embed usage get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_usage_get` | `GET /dashboards/{dashboard_id}/embed/usage` (GetEmbedUsage) | | `mammoth dashboard embed usage summary` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.embed_usage_summary` | `GET /workspaces/{workspace_id}/dashboards/embed-usage` (EmbedUsageSummary) | | `mammoth dashboard engagement get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.engagement` | `GET /dashboards/{dashboard_id}/engagement` (GetDashboardEngagement) | | `mammoth dashboard engagement person` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.engagement_person` | `GET /dashboards/{dashboard_id}/engagement/people/{user_id}` (GetDashboardEngagementPerson) | | `mammoth dashboard figure drill` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.figure_drill` | `POST /dashboards/{dashboard_id}/drill` (FigureDrill) | | `mammoth dashboard figure recipe` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.figure_recipe` | `POST /dashboards/{dashboard_id}/figure-recipe` (FigureRecipe) | | `mammoth dashboard figure rows` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.figure_rows` | `POST /dashboards/{dashboard_id}/rows` (FigureRows) | | `mammoth dashboard filter list` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dashboard format-preview` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.format_preview` | `GET /dashboards/{dashboard_id}/format-preview` (FormatPreview) | | `mammoth dashboard gallery get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.gallery_get` | `GET /dashboards/public/templates/{slug}` (DashboardPublicTemplate) | | `mammoth dashboard gallery list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.gallery_list` | `GET /dashboards/public/templates` (DashboardPublicTemplates) | | `mammoth dashboard get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.get` | `GET /dashboards/{dashboard_id}` (GetDashboard) | | `mammoth dashboard get-by-url` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.get_by_url` | `GET /dashboards/url/{url}` (GetDashboardByUrl) | | `mammoth dashboard job-by-url` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.job_by_url` | `GET /dashboards/url/{url}/jobs/{job_id}` (GetDashboardJob) | | `mammoth dashboard list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.list` | `GET /dashboards` (ListDashboard) | | `mammoth dashboard live-chart get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_get` | `GET /dashboards/v3/live-charts/{dashboard_id}` (GetLiveChart) | | `mammoth dashboard live-chart list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.live_chart_list` | `GET /dashboards/v3/live-charts` (ListLiveCharts) | | `mammoth dashboard live-chart usage` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.live_chart_usage` | `GET /dashboards/v3/live-charts/{dashboard_id}/usage` (GetUsage) | | `mammoth dashboard oembed` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.oembed` | `GET /dashboards/oembed` (Oembed) | | `mammoth dashboard og-card` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.og_card` | `GET /dashboards/{dashboard_id}/og-card` (OgCard) | | `mammoth dashboard own-data preview` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_preview` | `GET /dashboards/v3/{dashboard_id}/own-data/preview` (PreviewOwnData) | | `mammoth dashboard own-data status` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.own_data_status` | `GET /dashboards/v3/{dashboard_id}/own-data` (GetOwnData) | | `mammoth dashboard pbix-assess` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.attachment_assess` | `POST /dashboards/v3/attachments/{attachment_id}/assess` (AttachmentAssess) | | `mammoth dashboard pbix-intent` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.attachment_intent` | `POST /dashboards/v3/attachments/{attachment_id}/intent` (AttachmentIntent) | | `mammoth dashboard pdf-artifact` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.pdf_artifact` | `GET /dashboards/{dashboard_id}/pdf/{job_id}` (GetPdfArtifact) | | `mammoth dashboard published canvas` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_canvas` | `GET /dashboards/url/{url}/canvas` (GetCanvasPublished) | | `mammoth dashboard published drill` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_drill` | `POST /dashboards/url/{url}/drill` (FigureDrillByUrl) | | `mammoth dashboard published og-card` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_og_card` | `GET /dashboards/url/{url}/og-card` (OgCardByUrl) | | `mammoth dashboard published pdf-artifact` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_pdf_artifact` | `GET /dashboards/url/{url}/pdf/{job_id}` (GetPdfArtifactByUrl) | | `mammoth dashboard published rows` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_rows` | `POST /dashboards/url/{url}/rows` (FigureRowsByUrl) | | `mammoth dashboard published share-page` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_share_page` | `GET /dashboards/url/{url}/share` (SharePageByUrl) | | `mammoth dashboard published video-artifact` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.published_video_artifact` | `GET /dashboards/url/{url}/video.mp4` (VideoByUrl) | | `mammoth dashboard qa insights` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_insights` | `GET /dashboards/{dashboard_id}/qa/insights` (DashboardV3QaInsights) | | `mammoth dashboard qa session get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_session_get` | `GET /dashboards/{dashboard_id}/qa/sessions/{session_id}` (GetSession) | | `mammoth dashboard qa session list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.qa_session_list` | `GET /dashboards/{dashboard_id}/qa/sessions` (DashboardV3ListSessions) | | `mammoth dashboard qa settings get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.qa_settings_get` | `GET /dashboards/{dashboard_id}/qa/settings` (DashboardV3GetQaSettings) | | `mammoth dashboard rls assignment list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.rls_assignment_list` | `GET /dashboards/{dashboard_id}/rls/assignments` (ListRlsAssignments) | | `mammoth dashboard rls column list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.rls_column_list` | `GET /dashboards/{dashboard_id}/rls/columns` (GetRlsColumns) | | `mammoth dashboard rls value list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.rls_value_list` | `GET /dashboards/{dashboard_id}/rls/values` (GetRlsDistinctValues) | | `mammoth dashboard signature list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.signature_list` | `GET /dashboards/v3/signatures` (ListSignatures) | | `mammoth dashboard source list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.get_sources` | `GET /dashboards/sources` (GetDashboardSources) | | `mammoth dashboard style custom list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.style_custom_list` | `GET /dashboards/v3/styles/custom` (ListCustomStyles) | | `mammoth dashboard style default get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.style_default_get` | `GET /dashboards/v3/styles/default` (GetDefaultStyle) | | `mammoth dashboard style preset list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.style_preset_list` | `GET /dashboards/v3/styles/presets` (ListStylePresets) | | `mammoth dashboard style token list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.style_token_list` | `GET /dashboards/v3/styles/tokens` (GetStyleTokens) | | `mammoth dashboard suggestion list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.suggestion_list` | `GET /dashboards/v3/suggestions` (DashboardSuggestions) | | `mammoth dashboard swap-fit` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.swap_fit` | `POST /dashboards/v3/swap/fit` (SwapFit) | | `mammoth dashboard tags list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.list_tags` | `GET /dashboards/tags` (ListDashboardTags) | | `mammoth dashboard template fit` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_fit` | `GET /dashboards/v3/templates/fit` (FitTemplates) | | `mammoth dashboard template get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_get` | `GET /dashboards/v3/templates/{template_id}` (DashboardV3GetTemplate) | | `mammoth dashboard template list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dashboards.DashboardsAPI.template_list` | `GET /dashboards/v3/templates` (DashboardV3ListTemplates) | | `mammoth dashboard template thumbnail get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.template_thumbnail_get` | `GET /dashboards/v3/templates/{slug}/thumbnail` (DashboardV3TemplateThumbnail) | | `mammoth dashboard unpublished` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.unpublished` | `GET /dashboards/{dashboard_id}/unpublished` (GetUnpublishedChanges) | | `mammoth dashboard video-state` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.video_state` | `GET /dashboards/{dashboard_id}/video-state` (GetVideoState) | | `mammoth dataset batch-data` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.datasets.DatasetsAPI.get_batch_data` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/batches/{batch_id}/data` (GetBatchData) | | `mammoth dataset broken-rows list` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.get_unstructured_rows` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/unstructured_rows` (GetUnstructuredRows) | | `mammoth dataset column-stats` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.column_stats` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/column-stats` (GetProjectColumnStats) | | `mammoth dataset data` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.datasets.DatasetsAPI.get_data` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/data` (GetDatasetData) | | `mammoth dataset definition list` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.list_definitions` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/definitions` (GetDatasetDefinitions) | | `mammoth dataset download-plan` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset file-settings get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.get_file_settings` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/file_settings` (GetFileSettings) | | `mammoth dataset find` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset from-url links` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset from-url preview` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}` (GetDataset) | | `mammoth dataset list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.datasets.DatasetsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets` (GetDatasets) | | `mammoth dataset schema-diff` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth dataset search` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.search` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/search` (SearchDatasetsByContent) | | `mammoth dataset tool-claim get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.datasets.DatasetsAPI.tool_claim_get` | `GET /tool-claims` (GetToolClaim) | | `mammoth dataset update-method get` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth doctor` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth external-key get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.external_keys.ExternalKeysAPI.get` | `GET /workspaces/{workspace_id}/external_keys/{key_id}` (GetExternalKey) | | `mammoth external-key list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.external_keys.ExternalKeysAPI.list` | `GET /workspaces/{workspace_id}/external_keys` (GetKeysByWorkspaceId) | | `mammoth file get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.files.FilesAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/files/{file_id}` (GetFileDetails) | | `mammoth file list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.files.FilesAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/files` (ListFiles) | | `mammoth folder find` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth folder get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.folders.FoldersAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/folders/{folder_id}` (GetFolder) | | `mammoth folder list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.folders.FoldersAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/folders` (ListFolders) | | `mammoth folder root` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth history list` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth history show` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth how` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth job get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.jobs.JobsAPI.get_job` | `GET /jobs/{job_id}` (GetJob) | | `mammoth job get-many` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.jobs.JobsAPI.get_jobs` | `GET /jobs` (GetJobs) | | `mammoth job wait` | `profile` | Read | `none` | — | `always_wait` | `none` | — | — | | `mammoth job wait-many` | `profile` | Read | `none` | — | `always_wait` | `none` | — | — | | `mammoth link` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth log path` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth log tail` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth notification list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.notifications.NotificationsAPI.list` | `GET /notifications` (GetAllNotifications) | | `mammoth parameter dependencies` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.dependencies` | `GET /workspaces/{workspace_id}/parameters/{parameter_id}/dependencies` (GetParameterDependencies) | | `mammoth parameter get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.parameters.ParametersAPI.get` | `GET /workspaces/{workspace_id}/parameters/{parameter_id}` (GetParameterDetail) | | `mammoth parameter group list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.parameters.ParametersAPI.group_list` | `GET /workspaces/{workspace_id}/parameters/groups` (ListGroups) | | `mammoth parameter list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.parameters.ParametersAPI.list` | `GET /workspaces/{workspace_id}/parameters` (ListParameters) | | `mammoth project check` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth project checkpoint list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.projects.ProjectsAPI.checkpoint_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/checkpoints` (GetProjectCheckpoints) | | `mammoth project data-check list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.projects.ProjectsAPI.data_check_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/data-checks` (GetProjectDataChecks) | | `mammoth project get` | `project` | Read | `none` | — | `not_async` | `single_page` | — | — | | `mammoth project list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.projects.ProjectsAPI.list` | `GET /workspaces/{workspace_id}/projects` (GetProject) | | `mammoth project memory list` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth project needs-attention` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth project pending-changes` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.pending_changes` | `GET /workspaces/{workspace_id}/projects/{project_id}/pending-changes` (GetPendingChanges) | | `mammoth project publish-credentials` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.publish_credentials` | `GET /workspaces/{workspace_id}/projects/{project_id}/credentials` (GetPublishCredentials) | | `mammoth project resource-dependencies` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.resource_dependencies` | `GET /workspaces/{workspace_id}/projects/{project_id}/resource-dependencies` (GetResourceDependencies) | | `mammoth project resource-status` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.projects.ProjectsAPI.resource_status` | `GET /workspaces/{workspace_id}/projects/{project_id}/resource-status` (GetResourceStatus) | | `mammoth recipe list` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth report list` | `profile` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.reports.ReportsAPI.list` | `GET /reports` (GetReports) | | `mammoth resolve` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth run` | `profile` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth schedule get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.schedules.SchedulesAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/schedules/{schedule_id}` (GetSchedule) | | `mammoth schedule list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.schedules.SchedulesAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/schedules` (ListSchedules) | | `mammoth schema find` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth schema get` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth schema list` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth skill list` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth skill path` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth skill show` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth snippet dependencies` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.dependencies` | `GET /workspaces/{workspace_id}/snippets/{snippet_id}/dependencies` (GetSnippetDependencies) | | `mammoth snippet get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.snippets.SnippetsAPI.get` | `GET /workspaces/{workspace_id}/snippets/{snippet_id}` (GetSnippetDetail) | | `mammoth snippet list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.snippets.SnippetsAPI.list` | `GET /workspaces/{workspace_id}/snippets` (ListSnippets) | | `mammoth support connector bucket-impact` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.connector_bucket_impact` | `GET /support/connectors/{connector_id}/bucket-impact` (SupportConnectorBucketImpact) | | `mammoth support connector list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.connector_list` | `GET /subscription/connectors` (ListSubscriptionConnectors) | | `mammoth support connector-profile list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.connector_profile_list` | `GET /subscription/connector-profiles` (ListConnectorProfiles) | | `mammoth support deal activity` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_activity` | `GET /support/deals/{deal_id}/activity` (SupportDealActivity) | | `mammoth support deal get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_get` | `GET /support/deals/{deal_id}` (SupportGetDeal) | | `mammoth support deal list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.deal_list` | `GET /support/deals` (SupportListDeals) | | `mammoth support deal preview-entitlement` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.deal_preview_entitlement` | `GET /support/deals/{deal_id}/preview-entitlement` (SupportPreviewDealEntitlement) | | `mammoth support entitlement registry` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.entitlement_registry` | `GET /support/entitlements` (SupportEntitlementRegistry) | | `mammoth support feature list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.feature_list` | `GET /subscription/features` (ListFeatures) | | `mammoth support feature-profile list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.feature_profile_list` | `GET /subscription/feature-profiles` (ListFeatureProfiles) | | `mammoth support identity get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.identity_get` | `GET /support/identities/{user_id}` (SupportGetIdentity) | | `mammoth support identity list` | `workspace` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.support.SupportAPI.identity_list` | `GET /support/identities` (SupportListIdentities) | | `mammoth support partner activity` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_activity` | `GET /support/partners/{partner_id}/activity` (SupportPartnerActivity) | | `mammoth support partner billing` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_billing` | `GET /support/partners/{partner_id}/billing` (SupportGetPartnerBilling) | | `mammoth support partner client list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.partner_client_list` | `GET /support/partners/{partner_id}/workspaces` (SupportListPartnerClients) | | `mammoth support partner get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_get` | `GET /support/partners/{partner_id}` (SupportGetPartner) | | `mammoth support partner invoices` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.partner_invoices` | `GET /support/partners/{partner_id}/invoices` (SupportListPartnerInvoices) | | `mammoth support partner list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.partner_list` | `GET /support/partners` (SupportListPartners) | | `mammoth support plan catalog` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_catalog` | `GET /support/plans/catalog` (SupportPlansCatalog) | | `mammoth support plan chargebee-list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.plan_chargebee_list` | `GET /support/sms` (GetPlans) | | `mammoth support plan get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.plan_get` | `GET /subscription/plans/{plan_id}` (GetPlan) | | `mammoth support plan list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.plan_list` | `GET /subscription/plans` (ListSubscriptionPlans) | | `mammoth support plan self-serve-list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.plan_self_serve_list` | `GET /subscription/self-serve-plans` (ListSelfServePlans) | | `mammoth support plan storage-option list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.plan_storage_option_list` | `GET /subscription/plans/{plan_id}/storage-options` (ListStorageOptions) | | `mammoth support project-move get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.project_move_get` | `GET /support/project-moves/{move_id}` (GetProjectMove) | | `mammoth support search` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.search` | `GET /support/search` (SupportSearch) | | `mammoth support subscription get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.subscription_get` | `GET /support/workspaces/{workspace_id}/sms` (GetSubscriptionDetail) | | `mammoth support template audit` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_audit` | `GET /dashboards/v3/templates/admin/audit` (DashboardV3AdminAudit) | | `mammoth support template canvas` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_canvas` | `GET /dashboards/v3/templates/admin/{slug}/canvas` (DashboardV3AdminRowCanvas) | | `mammoth support template data-preview` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_data_preview` | `GET /dashboards/v3/templates/admin/{slug}/data-preview` (DashboardV3AdminDataPreview) | | `mammoth support template export` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_export` | `GET /dashboards/v3/templates/admin/{slug}/export` (DashboardV3AdminExportBundle) | | `mammoth support template export-dashboard` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_export_dashboard` | `GET /dashboards/v3/templates/admin/dashboards/{dashboard_id}/export` (DashboardV3AdminExportDashboard) | | `mammoth support template inspect` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.template_inspect` | `POST /dashboards/v3/templates/admin/inspect` (DashboardV3AdminInspectBundle) | | `mammoth support template list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.template_list` | `GET /dashboards/v3/templates/admin` (DashboardV3AdminCatalog) | | `mammoth support template snapshots` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.template_snapshots` | `GET /dashboards/v3/templates/admin/snapshots` (DashboardV3AdminSnapshots) | | `mammoth support triage` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.triage` | `GET /support/triage` (SupportTriage) | | `mammoth support usage-tiles` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.usage_tiles` | `GET /support/usage-tiles` (SupportUsageTiles) | | `mammoth support user list-all` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.user_list_all` | `GET /settings/users` (ListUsersOfWorkspaces) | | `mammoth support workspace activity` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_activity` | `GET /support/workspaces/{workspace_id}/activity` (SupportWorkspaceActivity) | | `mammoth support workspace archive-info` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_archive_info` | `GET /support/workspaces/{workspace_id}/archive` (SupportWorkspaceArchiveInfo) | | `mammoth support workspace deal-seed` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_deal_seed` | `GET /support/workspaces/{workspace_id}/deal-seed` (SupportWorkspaceDealSeed) | | `mammoth support workspace entitlement` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_entitlement` | `GET /support/workspaces/{workspace_id}/entitlement` (SupportWorkspaceEntitlement) | | `mammoth support workspace get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_get` | `GET /support/workspaces/{workspace_id}` (GetWorkspaceDetail) | | `mammoth support workspace list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.workspace_list` | `GET /support/workspaces` (ListWorkspaces) | | `mammoth support workspace project list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.workspace_project_list` | `GET /support/workspaces/{workspace_id}/projects` (ListProjects) | | `mammoth support workspace project move-check` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.support.SupportAPI.project_move_check` | `GET /support/workspaces/{workspace_id}/projects/{project_id}/move` (CheckProjectMove) | | `mammoth support workspace user list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.support.SupportAPI.workspace_user_list` | `GET /support/workspaces/{workspace_id}/users` (GetUserList) | | `mammoth template get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.templates.TemplatesAPI.get` | `GET /workspaces/{workspace_id}/templates/{template_id}` (GetTemplate) | | `mammoth template list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.templates.TemplatesAPI.list` | `GET /workspaces/{workspace_id}/templates` (ListTemplates) | | `mammoth token list` | `profile` | Read | `none` | — | `not_async` | `offset` | — | — | | `mammoth trash list` | `profile` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.trash.TrashAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/trash` (ListTrash) | | `mammoth user get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.get` | `GET /self` (GetUserDetails) | | `mammoth user preference get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.user_profile.UserProfileAPI.get_preferences` | `GET /preferences` (GetUserPreferences) | | `mammoth version` | `local` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view active-user list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dataviews.DataviewsAPI.active_users` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/activities` (GetActiveUsers) | | `mammoth view ai generation-info` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.ai.AIAPI.get_data_gen_info` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data/generate` (GetValidationInfo) | | `mammoth view analyze` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.analysis` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/analysis` (GetAnalysis) | | `mammoth view checkpoint get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.checkpoints.CheckpointsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints/{checkpoint_id}` (GetPipelineCheckpoint) | | `mammoth view checkpoint list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.checkpoints.CheckpointsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/checkpoints` (GetPipelineCheckpoints) | | `mammoth view compare` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.compare` | `POST /workspaces/{workspace_id}/dataviews/compare` (CompareDataviews) | | `mammoth view conditional-format list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dataviews.DataviewsAPI.conditional_format_list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/conditional-format` (GetConditionalFormat) | | `mammoth view data aggregate` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dataviews.DataviewsAPI.aggregate` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data/query` (ExecuteVolatileQuery) | | `mammoth view data compare` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view data drivers` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view data explore` | `project` | Read | `none` | — | `always_wait` | `none` | — | — | | `mammoth view data forecast` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view data get` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.dataviews.DataviewsAPI.get_data` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data` (GetDataviewData) | | `mammoth view data profile` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view data query` | `project` | Read | `none` | — | `always_wait` | `offset` | `mammoth.api.dataviews.DataviewsAPI.query_data` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data` (GetDataviewDataPost) | | `mammoth view data-check get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.data_checks.DataChecksAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks/{data_check_id}` (GetPipelineDataCheck) | | `mammoth view data-check list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.data_checks.DataChecksAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/data-checks` (GetPipelineDataChecks) | | `mammoth view derivative list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.derivatives.DerivativesAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/derivatives` (ListDerivatives) | | `mammoth view draft status` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view explore-panel export-image` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dashboards.DashboardsAPI.render_figure_svg` | `POST /dashboards/v3/render/svg` (RenderFigureSvg) | | `mammoth view explore-panel get` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth view export get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/{export_id}` (GetPipelineExport) | | `mammoth view export list` | `project` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.exports.ExportsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports` (GetPipelineExports) | | `mammoth view export runs` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.runs` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/exports/{export_id}/runs` (ListExportRuns) | | `mammoth view exportable-config get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.get_exportable_config` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/exportable-config` (GetExportableConfig) | | `mammoth view get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.client.ViewsResource.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}` (GetDataviewInformationIndividual) | | `mammoth view impact` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.delete_impact` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/impact` (GetDataviewDeleteImpact) | | `mammoth view list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.dataviews.DataviewsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews` (ListDataviews) | | `mammoth view parameter-context` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.parameter_context` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/parameter-context` (GetParameterContext) | | `mammoth view pipeline get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.get_pipeline` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline` (GetPipeline) | | `mammoth view pipeline items` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.items` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/items` (GetPipelineItems) | | `mammoth view pipeline items-all` | `project` | Read | `none` | — | `not_async` | `offset` | — | — | | `mammoth view pipeline wait` | `project` | Read | `none` | — | `always_wait` | `none` | — | — | | `mammoth view preview` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.preview` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/preview` (GetDataviewPreview) | | `mammoth view summary` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.dataviews.DataviewsAPI.summary` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/summary` (GetPanelSummary) | | `mammoth view task get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.pipeline.PipelineAPI.get_task` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks/{task_id}` (GetPipelineTask) | | `mammoth view task list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.pipeline.PipelineAPI.list_tasks` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/tasks` (GetPipelineTasks) | | `mammoth view task preview` | `project` | Read | `none` | — | `always_wait` | `none` | `mammoth.api.pipeline.PipelineAPI.preview_task` | `POST /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/task_preview` (GetTaskPreview) | | `mammoth view version get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions/{version_id}` (GetPipelineVersion) | | `mammoth view version list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.pipeline_versions.PipelineVersionsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/pipeline/versions` (GetPipelineVersions) | | `mammoth webhook get` | `profile` | Read | `none` | — | `not_async` | `none` | `mammoth.api.webhooks.WebhooksAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/webhooks/{webhook_id}` (GetWebhookDetails) | | `mammoth webhook list` | `profile` | Read | `none` | — | `not_async` | `offset` | `mammoth.api.webhooks.WebhooksAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/webhooks` (ListWebhooks) | | `mammoth workflow get` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.get` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/{workflow_id}` (GetWorkflow) | | `mammoth workflow graph` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.graph` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/graph` (GetProjectWorkflowGraph) | | `mammoth workflow list` | `project` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.workflows.WorkflowsAPI.list` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows` (ListWorkflows) | | `mammoth workflow template fit` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template get` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template list` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template preview` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template rank` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow template sample-result` | `project` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workflow workspace-datasets` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.workspace_datasets` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/workspace-datasets` (ListWorkspaceDatasets) | | `mammoth workflow workspace-exports` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.workspace_exports` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/workspace-exports` (ListWorkspaceExports) | | `mammoth workflow workspace-sources` | `project` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workflows.WorkflowsAPI.workspace_sources` | `GET /workspaces/{workspace_id}/projects/{project_id}/workflows/workspace-sources` (ListWorkspaceSources) | | `mammoth workspace app-usage` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.app_usage` | `GET /workspaces/{workspace_id}/app-usage` (GetAppUsage) | | `mammoth workspace current` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.current` | `GET /workspaces/current` (GetCurrentWorkspace) | | `mammoth workspace export-hosts get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.exports.ExportsAPI.export_hosts` | `GET /workspaces/{workspace_id}/export-hosts` (Read) | | `mammoth workspace get` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspace.WorkspaceAPI.get` | `GET /workspaces/{workspace_id}` (GetWorkspace) | | `mammoth workspace home` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.home_summary` | `GET /workspaces/{workspace_id}/home` (GetHomeSummary) | | `mammoth workspace invite list` | `workspace` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workspace list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.workspace.WorkspaceAPI.list` | `GET /workspaces` (GetWorkspaces) | | `mammoth workspace oauth-client list` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.oauth_clients.OAuthClientsAPI.list` | `GET /workspaces/{workspace_id}/oauth-clients` (ListOauthClients) | | `mammoth workspace segment list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.workspaces.WorkspacesAPI.segment_list` | `GET /workspaces/{workspace_id}/split-segments` (GetSegments) | | `mammoth workspace storage-breakdown` | `workspace` | Read | `none` | — | `not_async` | `none` | `mammoth.api.workspaces.WorkspacesAPI.storage_breakdown` | `GET /workspaces/{workspace_id}/storage-breakdown` (GetStorageBreakdown) | | `mammoth workspace user get` | `workspace` | Read | `none` | — | `not_async` | `none` | — | — | | `mammoth workspace user list` | `workspace` | Read | `none` | — | `not_async` | `single_page` | `mammoth.api.workspace.WorkspaceAPI.list_users` | `GET /workspaces/{workspace_id}/users` (GetUsersInWorkspace) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/notify-job` (AgentNotifyJob) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /oauth/device-approve` (ApproveDevice) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /oauth/consent` (Authorize) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /oauth/authorize` (AuthorizeRedirect) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /collections/reach` (CollectionsReach) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /workspaces/{workspace_id}/mm-ue` (Create) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/public/gallery` (DashboardPublicGallery) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/gallery` (DashboardPublicGalleryHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/public/gallery/sitemap.xml` (DashboardPublicGallerySitemap) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/gallery/sitemap.xml` (DashboardPublicGallerySitemapHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/public/gallery/{slug}` (DashboardPublicGalleryTemplate) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/gallery/{slug}` (DashboardPublicGalleryTemplateHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/templates/{slug}` (DashboardPublicTemplateHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/public/templates/{slug}/thumbnail` (DashboardPublicTemplateThumbnail) | | *(no CLI command)* | — | — | — | — | — | — | — | `HEAD /dashboards/public/templates` (DashboardPublicTemplatesHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /gdpr_hooks/{integration_name}/deauthorization` (DeleteUserData) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /oauth/consent/deny` (Deny) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /oauth/device-deny` (DenyDevice) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/needs-you/dismiss` (DismissAgentNeed) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/briefing` (GetAgentBriefing) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/documents/{sha}` (GetAgentChatDocument) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/documents/{sha}/pages/{page}` (GetAgentChatDocumentPage) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/images/{sha}` (GetAgentChatImage) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/{dashboard_id}/chat/attachments/{sha}` (GetChatAttachment) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /oauth/consent-info` (GetConsentInfo) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /oauth/device-info` (GetDeviceInfo) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /dashboards/{dashboard_id}/head` (GetDraftHead) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /workspaces/{workspace_id}/subscription_v1/invoices/{invoice_id}` (GetInvoice) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /subscription/stripe/webhook` (HandleStripeWebhook) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /health` (HealthCheck) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/needs-you` (ListAgentNeedsYou) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /workspaces/{workspace_id}/subscription_v1/invoices` (ListInvoices) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/seen` (MarkAgentSessionSeen) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /workspaces/{workspace_id}/projects/{project_id}/ai/connector-chat/oauth-callback` (OauthCallback) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /dashboards/{dashboard_id}/presence` (PostPresence) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/chart-placements` (RecordAgentChartPlacement) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/chip-feedback` (RecordAgentChipFeedback) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /workspaces/{workspace_id}/projects/{project_id}/events/resources/stream` (ResourceEventsStream) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /gdpr_hooks/shopify/customers/redact` (ShopifyCustomerRedact) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /gdpr_hooks/shopify/customers/data_request` (ShopifyDataRequest) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /gdpr_hooks/shopify/shop/redact` (ShopifyShopRedact) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /tool-claims` (StartToolClaim) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /jobs/{job_id}/stream` (StreamJob) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/sessions/{session_id}/credential-test` (TestAgentCredentialCard) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /dashboards/{dashboard_id}/track-action` (TrackAction) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /dashboards/url/{url}/track-heartbeat` (TrackHeartbeat) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /dashboards/url/{url}/track-view` (TrackView) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /unsubscribe` (UnsubscribeMessaging) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/documents` (UploadAgentChatDocument) | | *(no CLI command)* | — | — | — | — | — | — | — | `POST /agents/images` (UploadAgentChatImage) | | *(no CLI command)* | — | — | — | — | — | — | — | `GET /agents/sessions/{session_id}/turns/{turn_id}/events` (WatchAgentTurn) | --- # Mammoth board embedding URL: https://mammoth.io/docs/build/embedding/ · Updated: 2026-11-02 Embed a Mammoth board in your own page. Covers the three embed modes, the origin allowlist, the workspace signing secret and the nine REST operations. A Mammoth board inside a page you control, scoped to a viewer who has no Mammoth account and never signs in. > **Eight of the nine operations have a command** > > Every operation below except the workspace-wide usage read has a `mammoth dashboard embed` command and a matching `client.dashboards.embed_*` SDK method. The workspace-wide usage read is REST only. > **Embedding on your own website is being rolled out** > > Embedding a board on your own website, as an iframe on another domain, is being rolled out. Until then, the public link and opening the embed URL directly work, while the browser blocks framing from another domain. ## The three modes **Every published board embeds.** The mode is not a switch that turns embedding on. It decides what a board *without* a public link demands from the page framing it. | Mode | The board | Viewer is | Sees | | --- | --- | --- | --- | | `public` | has a public link | anyone | the whole board | | `key` | no public link; the page presents the board's embed key | anonymous, no viewer identity | every row | | `signed` | no public link; every viewer needs a host-signed token | whoever your token says | the rows your claims allow | All three modes are available regardless of plan. Availability of the attribution mark—whether a "Built with Mammoth" footer appears—depends on your plan; check with your admin. A board with a public link embeds over that link whatever `mode` is saved. ## Who can change what Two different permissions, and mixing them up is the first thing to get wrong. Board settings are an editor's. The workspace signing secret and the session lifetime are an owner's or admin's. ## The nine operations The commands take the board id as the first argument, or the workspace id for the two workspace commands. `config set`, `key rotate`, `origin revoke` and `secret rotate` need `--yes --confirm ID`, repeating that id. `lifetime set` and `preview-token create` need no confirmation. `mammoth schema get ` shows each command's input. ### Per board | Operation | What it does | CLI | | --- | --- | --- | | `GET /dashboards/{id}/embed/config` | Read a board's embed settings. | `mammoth dashboard embed config get` | | `PUT /dashboards/{id}/embed/config` | Save them: mode, origin policy, appearance, snippet shape. | `mammoth dashboard embed config set` | | `POST /dashboards/{id}/embed/key` | Create or rotate the board's embed key. Editor only. | `mammoth dashboard embed key rotate` | | `POST /dashboards/{id}/embed/preview-token` | Mint a preview token for the simulator. Editor only. | `mammoth dashboard embed preview-token create` | | `DELETE /dashboards/{id}/embed/origin` | Revoke one origin from the allowlist. | `mammoth dashboard embed origin revoke` | | `GET /dashboards/{id}/embed/usage` | Where this board has been loaded from. | `mammoth dashboard embed usage get` | ### Per workspace | Operation | What it does | CLI | | --- | --- | --- | | `POST /workspaces/{id}/embed/secret` | Create or rotate the signing secret. Owners and admins only. | `mammoth dashboard embed secret rotate` | | `PUT /workspaces/{id}/embed/lifetime` | How long an embed viewer session lives, 60 to 3600 seconds. | `mammoth dashboard embed lifetime set` | | `GET /workspaces/{id}/dashboards/embed-usage` | Distinct origins per board over the last 90 days. | REST only | ## The signing secret is returned once > **No read route ever includes the secret** > > `POST /workspaces/{id}/embed/secret` returns the plaintext secret **once**. Nothing reads it back, and the route is excluded from the request log. Store it the way you store `MAMMOTH_API_TOKEN`: in the environment, never in a prompt, a script or a repository file. Rotating keeps the previous secret valid for **24 hours**, so a rotation does not invalidate every live token at once. The board-level embed key behaves the same way and for the same reason; send `keep_previous: false` to end the old one immediately. ## Framing is open until you close it `allow_any_origin` defaults to **true**. Any site may frame the board until you set it false, and only then does `allowed_origins` restrict anything. - Patterns are `https://host[:port]`, with one leading `*.` label allowed. - Normalised and de-duplicated, at most 20 per board. - `DELETE .../embed/origin` returns **400** while the board is open to any site. There is no list to take a site off. ## A page opened from a file cannot frame a board A page opened straight from disk (a `file://` address) cannot frame an embed. The embed response allows framing with `frame-ancestors *`, and that rule matches only `http` and `https` pages. This is a browser rule, so no board setting changes it. Serve the test page over `http://localhost` or from your real site instead. ## Signed mode, and the preview token In `signed` mode your server mints a token per viewer, carrying `claims` keyed by the board's row-level-security rules. A signed token may not outlive the workspace session lifetime, so the 60–3600 second setting caps both. `POST .../embed/preview-token` exists so an author can see the board under a given scope *without ever holding the secret*: it signs server-side with the workspace secret and is editor-only. Use it to check a scope before you build the signing into your backend. ## What usage data can and cannot tell you `GET .../embed/usage` returns one row per origin and tile, with rolling render counts, health, and whether the origin is still on the allowlist. > **Observed, not known** > > The registry is built from render beacons. It records where a board **has been loaded from**, which is not the same as where it has been embedded: a snippet pasted into a page nobody has opened does not appear. Read it as a floor, never a count. ## Snippet shape `snippet.height` is `auto` (the SDK grows the frame), `aspect` (16:9), or a pixel count from 240 to 2400. `appearance` carries the saved look applied on load, including `tile` to embed one chart instead of the whole board. ## Order of operations 1. Publish the board. An unpublished board has nothing to frame. 2. Decide the mode. Leave it `key` unless a viewer must see only their own rows. 3. For `signed`: rotate the workspace secret, store the plaintext, set the session lifetime. 4. Close the origin policy if you need it closed: `allow_any_origin: false` plus `allowed_origins`. 5. Check a scope with a preview token before writing the signing into your backend. 6. Read usage after the page is live, as a floor. > **Verify against your workspace** > > Generated from the v2 OpenAPI spec as read on September 20, 2026. The spec your workspace serves is authoritative where this page is a copy: `GET /api/v2/docs/openapi.json`. ## Next up - [Authentication](https://mammoth.io/docs/build/auth/): API tokens, and where credentials belong. - [Command contract](https://mammoth.io/docs/build/): every command, with its blast radius and endpoint. --- # Mammoth errors and exit codes URL: https://mammoth.io/docs/build/errors/ · Updated: 2026-11-02 The CLI error envelope, the exit-code table, which failures are worth retrying, and the per-method rate limits that apply to every caller. How failures are reported, which of them are worth retrying, and which are a bug in the request. ## Read the envelope, not the text In machine output the CLI writes a versioned envelope. Success goes to stdout; errors go to stderr. Branch on the exit code and the stable `error.code`, never on the human-readable message. **Success, stdout:** ```json {"schema_version": 1, "data": "", "meta": {"command": "…", "profile": "default", "workspace_id": 4, "project_id": 180}} ``` `meta` carries only the keys that have a value. It adds `pagination` on a paged read, and `update_available` (`{"current", "latest", "command"}`) when a newer CLI release exists. The CLI checks once a day, after a command, and never blocks on it. It installs a newer release by itself only in an interactive terminal; in CI, in a pipe or in an agent run it only reports `update_available`. `MAMMOTH_AUTO_UPGRADE=1` forces the install on, and `MAMMOTH_NO_UPDATE_CHECK=1` turns the check off. ### A write returns what it did Every command that changes something adds two blocks to `data`. Read them before you build on the change. - `verify` is the CLI's own verdict: `verified` (true or false), a `state`, any `warnings`, a `reason` when it is not verified, and `needs_user`. When `needs_user` is set, stop and tell a person before the next step. A row-changing step also carries `rows_before` and `rows_after`. - `outcome` is `settled`, `pending`, `partial` or `failed`. The envelope's top-level `status` follows the last three: `partial` exits 3, and `failed` exits 1 even though the API call itself went through (`verify.reported_status` keeps the earlier word). - A write still running when the wait ends reports `status: pending` and `verify.next_command` (`mammoth view pipeline wait VIEW_ID`, or `mammoth job wait ID` for an automation). It exits 0: the change was accepted, so wait on it and never replay it. - `state` is a fresh read of what the write produced, taken after it settled, not echoed from your request. If that read fails, `state` says `unreadable` and `verify.verified` becomes false. A success envelope proves the call went through. The `state` block shows the outcome. **Error, stderr:** ```json {"schema_version": 1, "error": {"code": "…", "message": "…", "summary": "…", "hint": "…", "details": {}, "request_id": null, "retryable": false, "authorization_required": false, "recovery_commands": ["…"], "log_ref": {"file": "…", "run_id": "…"}}} ``` `summary` is a plain-language sentence you can show a person. `log_ref` points at the local run log: `mammoth log tail --input '{"run_id": "RUN_ID"}'` lists every request that run made, with its HTTP status and the backend `request_id`. Quote both when you report a backend fault. `schema_version` is a compatibility contract. It is `1` today and increments only on a breaking change to the envelope shape. Check it if you parse envelopes across CLI upgrades. ## Exit codes | Code | Meaning | Retry? | | --- | --- | --- | | 0 | Success | n/a | | 1 | API error | no | | 2 | Usage, input, or confirmation failure | no | | 3 | Partial: a write whose read-back shows only part of it took effect | no | | 4 | Authentication failure | no | | 5 | Not found | no | | 6 | Conflict, including `file_exists` when an export would overwrite a local file | no | | **7** | **Retryable (network or timeout)** | **yes** | | 130 | Interrupted | no | > **Never retry a mutation on anything but 7** > > The CLI does not retry a mutation without a real server idempotency contract, and neither should your code. An interruption returns `130` and closes sessions and files cleanly. A timeout, exit code `7` or an interruption does not prove a write failed. When `details.operation_state` is `outcome_unknown`, the change may have committed: reconcile it with `mammoth job get` or a read of the resource before you replay it. Exit 3 is not a transport failure. Read `verify` to see which part of the write took effect, finish or undo it, and do not replay the whole command. ## Commands the server does not offer yet The data-app commands and `schedule create` fail at once with the error code `feature_unavailable` and send no request. They do not appear in `mammoth schema find`. ## Local checks `view transform extract-date`, `date-diff`, `increment-date` and `math` check column types before any request. A TEXT column is refused with `column_type_mismatch`, and the error names the `convert-type` command to run first. An unexpected fault in the CLI itself is reported as `internal_error`; rerun with `--debug` for the stack trace. A command that writes a local file (`view export csv`, `dashboard bi-export`, `explore-panel export-image`, `support template export`) refuses an existing file with `file_exists` (exit 6) unless you pass `--overwrite`. ## Confirmation failures A mutation that needs a confirmation and does not get one fails with exit code `2` and an error code of `confirmation_required` or `confirmation_target_mismatch`. It never proceeds and never prompts off a terminal. The rule is the same everywhere: an action that cannot be undone needs `--yes`, and a `confirm_target` command also needs `--confirm ID` with the exact target id. The CLI checks `--confirm` before it makes any API call. ## On the HTTP side Calling the API directly, a bad or missing credential returns **401**; an authenticated caller without permission gets **403**. The Python SDK raises `MammothAuthError` for the first. Measured across all 471 operations in the v2 spec, the responses you will in fact meet are `400` (declared on 463), `403` (275), `404` (50), `202` (82, an async job), `422` (6) and `409` on exactly two. Those two are worth special handling: a `409` means you tried to delete a parameter or snippet that is still referenced, and it is the case a user most needs a clear message for. > **There is no uniform response envelope on the REST API** > > Successful responses return the resource schema directly. Error responses carry `{status_code, detail, extra}`. The `{data, meta}` envelope belongs to the CLI, not to the API, so do not write a client that expects a `data` wrapper from HTTP. ## Rate limits Limits are **per HTTP method** and they apply to **every caller**, not only to paid tiers. | Method | Requests per minute | | --- | --- | | `GET` | 600 | | `POST` | 300 | | `PATCH` | 60 | | `DELETE` | 60 | A fixed one-minute window, counted in Redis, keyed on your session when authenticated and on the caller IP when not. That last detail matters if you are embedding: anonymous dashboard viewers share a limit by IP. > **429 is declared on none of the 471 operations** > > The OpenAPI spec does not advertise a 429 response anywhere, so a client generated from the spec will not have a handler for one. Write the retry yourself, and back off rather than hammering the window. > **There is no daily quota** > > Not for any tier. The one-minute window above is the only limit that exists. If you have designed against a daily request allowance, it was never real. ## The business error object Some endpoints carry a richer error *inside* the transport envelope. It is real in the implementation but not discoverable from the spec, so expect the Litestar envelope at the transport level and look for the business error within it. Do not write a client that expects the business object as the top-level body. > **One letter apart, two different contracts** > > The API business error uses `error_code`. The CLI envelope uses `error.code`. A client that reads the wrong one silently finds nothing. ## Next up - [Agents and CI](https://mammoth.io/docs/agents/ci/)—the reliable operation loop, end to end. - [Blast radius and safety](https://mammoth.io/docs/agents/safety/)—what each command will demand before it runs. --- # Build with Mammoth URL: https://mammoth.io/docs/build/ · Updated: 2026-11-02 Everything you can do to Mammoth from code, in one place—the CLI, the Python SDK, and the REST API, plus the generated capability contract behind all three. Everything you can do to Mammoth from code. There are three ways in: - **The CLI** (`mammoth`) is the fastest way to do something once, and the right way to drive Mammoth from an agent or from CI. It describes itself at runtime, so you never have to guess a request shape. - **The Python SDK** (`mammoth-io`) belongs inside a data pipeline or a notebook. The CLI is built on it and adds no second HTTP client. - **The REST API** is for everything else. ## Start here | Page | What it covers | | --- | --- | | [Authentication](https://mammoth.io/docs/build/auth/) | Headers, base URL, regions and credential storage | | [Quickstart](https://mammoth.io/docs/build/quickstart/) | A first real call, three ways | | [CLI reference](https://mammoth.io/docs/build/cli/) | Every command family, one page each | | [Python SDK](https://mammoth.io/docs/build/sdk/) | Install `mammoth-io`, create a client, work with views | | [Errors](https://mammoth.io/docs/build/errors/) | The CLI error envelope, exit codes and rate limits | | [Pagination](https://mammoth.io/docs/build/pagination/) | `limit`/`offset` versus the two cursor endpoints | | [Embedding](https://mammoth.io/docs/build/embedding/) | Put a Mammoth board inside a page you control | | [API workflows](https://mammoth.io/docs/guides/advanced/api-workflows/) | Automated workflows over the REST API, in Guides | > **One embedding operation has no command** > > [Embedding](https://mammoth.io/docs/build/embedding/) is nine REST operations. Eight have a `mammoth dashboard embed` command. The workspace-wide usage read does not. ## Command contract The full command table is on the [capability contract](https://mammoth.io/docs/build/contract.md) page, and as JSON at https://mammoth.io/docs/build/capabilities.json. Every capability in one searchable, filterable table: the CLI command, the Python SDK method, the REST endpoint where one is resolved, and the blast radius—how much damage the operation can do—so you can see what an operation costs before you run it. The table is generated from the CLI's own description of itself: `mammoth schema list` for every command, and `mammoth capability list` for the SDK method and API operation behind it. Nothing on it is hand-authored. See the [CLI reference](https://mammoth.io/docs/build/cli/) for the command families one at a time, or fetch [the raw contract](https://mammoth.io/docs/build/contract/) as data. --- # Mammoth API pagination URL: https://mammoth.io/docs/build/pagination/ · Updated: 2026-11-02 Most Mammoth list endpoints page with limit and offset. Cursor pagination exists on exactly two of 471 operations. Measured against the v2 spec. Most list endpoints page with `limit` and `offset`. Two use a cursor. Assuming otherwise gives you a loop that never advances. ## Which endpoints page, and how | Parameter | Operations carrying it | | --- | --- | | `limit` | 37 | | `offset` | 34 | | `cursor` | **2** | Not every endpoint pages at all. Those that do overwhelmingly use `limit` and `offset`, with a `total` in the body so you know when to stop. ## Offset pagination ```bash LIMIT=100 OFFSET=0 while : ; do BODY=$(curl -sS "https://app.mammoth.io/api/v2/workspaces/$WS/projects/$P/datasets?limit=$LIMIT&offset=$OFFSET" \ -H "Authorization: Bearer $MAMMOTH_API_TOKEN") TOTAL=$(echo "$BODY" | jq -r '.total') echo "$BODY" | jq -c '.datasets[]?' OFFSET=$((OFFSET + LIMIT)) [ "$OFFSET" -ge "$TOTAL" ] && break done ``` Through the SDK and the CLI this is handled for you in most cases. Going direct to HTTP, read `total` and advance `offset` by your `limit` until you have them all. ## Paging through the CLI `mammoth view data get`, `mammoth view export list` and `mammoth view pipeline items` page with `offset` and `limit` in `--input`. The offset is 0-based and counts the rows to skip: `offset: 0` is the first page. The response reports the `limit` and `offset` it used in a `paging` block with `next_command` and `previous_command`, ready to run. Each is null when there is no such page. ```bash mammoth view data get 1039 --project 180 --input '{"offset": 0, "limit": 50}' ``` Follow `paging.next_command` until it is null. A script that passed `1` for the first page must now pass `0`. ## The two cursor exceptions Cursor pagination is the exception, not the rule. It appears on the Resources v2 surface only: ``` GET /workspaces/{workspace_id}/resources GET /workspaces/{workspace_id}/projects/{project_id}/resources ``` These return a cursor to pass back on the next request. Do not write a cursor loop against anything else; the parameter is not there. > **Only two endpoints take a cursor** > > Cursor pagination is on **2 of 471** operations, the two Resources endpoints above. A cursor loop against any other list endpoint never advances; page those with `limit` and `offset`. ## Next up - [Errors and exit codes](https://mammoth.io/docs/build/errors/)—how failures are reported, and what is worth retrying. - [Command contract](https://mammoth.io/docs/build/)—every capability with its CLI, SDK and API forms. --- # Mammoth API quickstart URL: https://mammoth.io/docs/build/quickstart/ · Updated: 2026-11-02 From nothing to a transformed, exported dataset in about five minutes, shown three ways—curl, the mammoth-io Python SDK, and the Mammoth CLI. From nothing to a transformed dataset, three ways. All three do the same thing against the same API. You need an API token first—see [Authentication](https://mammoth.io/docs/build/auth/). ## 1 · Install **CLI** ```bash curl -fsSL https://raw.githubusercontent.com/EdgeMetric/mammothsdk/main/mammoth-cli/installers/mammoth-install.sh | sh mammoth --version ``` **Python SDK** ```bash pip install mammoth-io ``` **curl** ```bash # Nothing to install. ``` ## 2 · Authenticate ```bash export MAMMOTH_API_TOKEN="mm_" ``` **CLI** ```bash mammoth auth login --input creds.json --storage file --output json --no-input mammoth doctor --output json --no-input ``` **mammoth-io** The SDK is async: run these steps inside one `async def main()` and start it with `asyncio.run(main())` (in a notebook, `await` directly). ```python import asyncio import os from mammoth import MammothClient async def main(): async with MammothClient( api_token=os.environ["MAMMOTH_API_TOKEN"], ) as client: ... # steps 3 to 7 go here asyncio.run(main()) ``` > **The CLI does not read that environment variable** > > It is how the **SDK** gets its token. The CLI has no environment-variable shortcut: it reads the credentials you stored above, from your OS keyring or from the credentials file. See [Authentication](https://mammoth.io/docs/build/auth/). ## 3 · Pick a project Most operations need a project. The workspace comes from the token. **CLI** ```bash mammoth project list --output json --no-input mammoth context project use ``` **mammoth-io** ```python await client.projects.list() # {"projects": [...], "offset": 0, ...} client.set_project_id(PROJECT_ID) ``` ## 4 · Load some data **CLI** ```bash mammoth dataset create --input '{ "dataset_spec": {"url": "https://sampledata.mammoth.io/Multi-Store_Retail_Sales.csv"}, "ds_creation_type": "weburl" }' --output json --no-input ``` **mammoth-io** ```python await client.datasets.list() # upload a local file, or create from a URL, see the SDK reference ``` > **Keep the dataset id** > > The response carries it: `{"status": "ready", "dataset_id": 303686, "job_id": 14794754}`. Both create commands block until the dataset is ready, so there is no job to poll by hand. ## 5 · Find the view A dataset has one or more views, and transformations act on a **view**, not on the dataset. Take the id of the first one. ```bash mammoth view list --project --output json --no-input ``` ## 6 · Transform it A **View** is the object you work on: it wraps a dataview and carries the transformation methods. Transformations apply in place—each call sends a task to the pipeline, waits for it, and refreshes the view. **CLI** ```bash mammoth view transform math --project \ --input '{"expression": "quantity_sold * unit_price", "new_column": "revenue"}' ``` **mammoth-io** ```python from mammoth import Condition, Operator view = await client.views.get(VIEW_ID) await view.filter_rows(Condition("quantity_sold", Operator.GTE, 10)) await view.math("quantity_sold * unit_price", new_column="revenue") ``` ## 7 · Get the result out **CLI** ```bash mammoth view export csv --project --output json --no-input ``` The command writes a local file and refuses one that already exists with `file_exists` (exit 6). Pass `--overwrite` to replace it. **mammoth-io** ```python await view.export.to_csv("output.csv") ``` ## 8 · Clean up Delete anything temporary. Note the confirmation: destructive commands need `--yes`, and there is no prompt when there is no terminal. ```bash mammoth dataset delete --project --yes --output json --no-input ``` ## Next up - [Command contract](https://mammoth.io/docs/build/): all command families, with blast radius. - [For coding agents](https://mammoth.io/docs/agents/): the discovery loop, the envelope, exit codes. --- # Mammoth Analytics Python SDK (mammoth-io) URL: https://mammoth.io/docs/build/sdk/ · Updated: 2026-11-02 Install mammoth-io, create a client, work with Views, apply transformations and export results. Python 3.12 to 3.14. `mammoth-io`. Build data pipelines, apply transformations, and export results from Python. > **From other languages, use the REST API** > > There is no JavaScript or TypeScript SDK. Neither `@mammoth/sdk` (npm) nor `mammoth-sdk` (PyPI) is a Mammoth package. Call the REST API directly instead. ## Install ```bash pip install mammoth-io ``` Or with Poetry: ```bash poetry add mammoth-io ``` | | | | --- | --- | | Package | `mammoth-io` | | Python | **3.12, 3.13, 3.14 only**. A user on 3.10 or 3.11 cannot install it. | | Dependencies | `httpx`, `pydantic`, ranged rather than pinned | | Optional extra | `bridge`, which pins its dependencies exactly | | Licence | Proprietary. The repo is public to read, which is **not** the same as open source. | > **Read PyPI for the version** > > No version number is printed on this page on purpose. The package ships often enough that a number written into documentation is stale within hours. Read it from the source of truth instead: > > `pip index versions mammoth-io` ## Create a client The client is **async**: every call that talks to the API must be awaited. Run your code inside `asyncio.run(...)`, or `await` directly in a notebook. Pass only the API token: a token belongs to one workspace, so the client takes no `workspace_id` and rejects one. Most operations also need a project. ```python import asyncio import os from mammoth import MammothClient async def main(): async with MammothClient( api_token=os.environ["MAMMOTH_API_TOKEN"], ) as client: client.set_project_id(10) projects = await client.projects.list() asyncio.run(main()) ``` The client sends your token as `Authorization: Bearer mm_...` on every request, against a default base URL of `https://app.mammoth.io/api/v2`. On first use it asks Mammoth which workspace the token belongs to and keeps the answer in `client.workspace_id`. `async with` closes its HTTP session when the block ends; without it, call `await client.close()` yourself. Constructing the client and `set_project_id` are synchronous. The examples below run inside `main()` above. Store credentials in environment variables. Never hard-code a token, never put one in a prompt, and never commit one—see [Authentication](https://mammoth.io/docs/build/auth/). ### Getting ids out of a URL ```python from mammoth import parse_path ids = parse_path("https://app.mammoth.io/#/workspaces/11/projects/10/views/1039") # {"workspace_id": 11, "project_id": 10, "dataview_id": 1039} ``` ## Views are the object you work on A **View** wraps a dataview and carries the transformation methods, the data accessors and the export helpers. ```python view = await client.views.get(1039) view.name # "My View" view.display_names # ["Sales", "Region", "Date", ...] view.column_types # {"Sales": "NUMERIC", "Region": "TEXT", ...} ``` ## Transformations apply in place Each call sends a task to the Mammoth pipeline, waits for it to complete, and refreshes the view metadata. You do not assemble a plan and submit it; you act on the view. ```python from mammoth import Condition, Operator, ColumnType, SetValue # Filter rows await view.filter_rows(Condition("Sales", Operator.GTE, 1000)) # Add a computed column await view.set_values( new_column="Category", column_type=ColumnType.TEXT, values=[ SetValue("High", condition=Condition("Sales", Operator.GTE, 10000)), SetValue("Low"), ], ) # Math expression await view.math("Price * Quantity", new_column="Total") ``` ### Rename and sort are display settings Renaming a column and sorting rows are the web grid's own actions, not pipeline tasks. They change how the view presents its data, and later reads, exports, and dashboards follow them. ```python await view.rename_columns({"cust_ref": "Customer Ref"}) await view.sort_rows([["Sales", "DESC"], ["Region", "ASC"]]) # up to three columns; [] clears ``` A renamed column keeps its internal name, so pipeline tasks that already use it keep working, and later calls refer to it by the new name. ## Export ```python await view.export.to_csv("output.csv") await view.export.to_s3(...) await view.export.to_postgres(...) ``` ## Working with resources ```python await client.projects.list() # {"projects": [...], "offset": 0, ...} await client.datasets.list() await client.files.upload(...) ``` Note the shape of a list response: the resource collection plus paging fields. See [pagination](https://mammoth.io/docs/build/pagination/). ## Errors - `MammothAuthError` on HTTP 401. Not retryable: check the token. - Never hard-code credentials. Read them from the environment, as above. ## Next up - [The CLI](https://mammoth.io/docs/build/cli/)—built on this SDK, with discovery and safety on top. - [Command contract](https://mammoth.io/docs/build/)—every SDK method with its CLI command and blast radius. - [Authentication](https://mammoth.io/docs/build/auth/)—headers, base URL, regions, credential storage. - [Errors and exit codes](https://mammoth.io/docs/build/errors/)—what the API returns and what is worth retrying. --- # AI-powered workflows URL: https://mammoth.io/docs/guides/advanced/ai-powered-workflow/ · Updated: 2026-11-02 Choose between Generative AI, AI SQL Query, Bulk Replace and the AI Prompt bar, write prompts with consistent output, and run AI pipelines in production. Mammoth's AI Powered transformations apply language-model intelligence to your data: **Generative AI** writes new column values row by row, **AI SQL Query** turns a plain-English description into SQL, **Bulk Replace** proposes groupings for messy values, and the **AI Prompt** bar ("Describe your transformation") turns a typed instruction into pipeline tasks. This guide is for analysts and data engineers. It covers when to use each, how to write prompts that produce consistent output, and how to design pipelines that use AI reliably in production. --- ## Which AI transform to use | Transform | What it does | Use when | | --- | --- | --- | | **Generative AI** | Writes a new (or overwrites an existing) column from a prompt, using the context columns you select | Classification, extraction, translation, or scoring that needs reasoning about meaning | | **AI SQL Query** | Generates SQL from a plain-English description, which you review before applying | Multi-column logic, conditions, or aggregations that are easier to describe than to build task by task | | **Bulk Replace** | Groups similar values in a column and replaces them with a standard name | Many spellings of the same value (company names, statuses, locations) | | **AI Prompt bar** | Picks the right transformation and fills in its parameters from your description | You know what you want but not which task to use | The key distinction: **Generative AI** calls a language model for each row, so it is flexible but needs careful prompt design for consistent output. The other three produce deterministic pipeline tasks (a SQL query, a replacement rule, or a standard function) that you can inspect and re-run with identical results. Generative AI uses an external AI key saved in your workspace, and it has limits: 300 characters per generated value, up to 20 context columns, and only the first 50,000 rows of the view are processed. See [Generative AI](https://mammoth.io/docs/learn/transform/generative-ai/) for the full reference. --- ## Classification patterns with Generative AI ### Designing categories The quality of classification depends heavily on how the categories are defined. **Poor category set:** - `Sales`, `Marketing`, `Other`: vague and overlapping, and `Other` will be overused **Good category set:** - `Pricing Inquiry`, `Feature Request`, `Bug Report`, `Billing Issue`, `Account Access`, `Integration Help`, `General Feedback`, `Onboarding` - Each category is distinct, has a clear definition, and covers a specific scenario **Rules for good categories:** 1. Mutually exclusive: a row should clearly belong to one category 2. Collectively exhaustive: every possible input has a natural home (avoid needing `Other`) 3. Operationally meaningful: the output drives a decision or action 4. Few enough to validate: fewer than 3 categories rarely needs AI, and a long list is hard to check ### Category definitions Put the category list and a short definition of each in the prompt itself: - `Bug Report`: "The product is behaving incorrectly or unexpectedly. Examples: 'the export button does nothing', 'I got an error when uploading'" - `Feature Request`: "The user wants functionality that doesn't exist. Examples: 'can you add Excel export?', 'I wish I could filter by date'" Definitions and examples remove ambiguity and make the output more consistent. Finish the prompt with an instruction such as `Return only the category name.` ### Validation approach After building a Generative AI task: 1. Use **Preview** to check a 5-row sample before you apply the task to the whole dataset 2. After applying, sample rows from each category—are the classifications accurate? 3. Find the rows the AI got wrong—do they reveal an ambiguous category definition? 4. Refine the prompt until accuracy is acceptable for the use case 5. Document the accepted accuracy level and the date reviewed --- ## Prompt patterns ### Prompt engineering for data A Generative AI prompt is applied to every row, using the context columns you select. Write the instruction once; it runs on each row's values. **Principle: be specific about format** Bad: `"Extract the product name from this order note"`\ Good: `"Extract the product name from this order note. Return only the product name, with no extra words, punctuation, or explanation. If no product name is mentioned, return 'Unknown'."` The second version constrains the output format, making downstream tasks predictable. **Principle: specify what to do when data is missing** Always include a null/empty case:\ `"If the input is empty or unclear, return 'Not specified'"` Without this, the AI may return `None`, `null`, `N/A`, `not available`, or a sentence, all of which look different in downstream filtering. **Principle: show an example** For complex extractions:\ `"Extract the numeric value and unit from this measurement string. Examples: '14.5 kg' → '14.5', '200ml' → '200', 'N/A' → ''"` ### Common use cases Select the referenced columns as the task's context columns. **Entity extraction:**\ `"Using the email column, extract the company name from the email address domain and return only the company name (e.g. 'acme.co.uk' → 'Acme'). If unclear, return the domain without the TLD."` **Standardization across sources:**\ `"Standardize the job_title column to a standard function. Map to one of: Engineering, Sales, Marketing, Finance, Operations, HR, Legal, Executive, Other."` **Address parsing:**\ `"Parse the address column into JSON with keys: street, city, state, postal_code, country. If a component is missing, use null. Return only valid JSON."` Then use **Extract JSON** to pull each key into its own column. **Sentiment to score:**\ `"Rate the sentiment of the comment column from -2 (very negative) to +2 (very positive). Return only the number."` The output is still a text column, so convert its type before doing math on it. --- ## Deriving new columns A Generative AI task can derive a column from several existing ones, for example: - Description: "Customer risk tier based on days since last purchase, total spend, and account age" - Context columns: `DaysSinceLastPurchase`, `TotalLifetimeSpend`, `AccountAgeDays` - Output: `High`, `Medium`, `Low` risk tier When the logic is a fixed rule (thresholds and arithmetic), prefer **AI SQL Query** or a standard task: the rule is visible, repeatable, and costs nothing per row. Use Generative AI when the derivation depends on understanding meaning. --- ## Production AI pipeline design ### Cost management Generative AI processes rows individually using your own AI provider key, so usage is proportional to rows processed × input length. **Cost reduction strategies:** 1. **Filter before AI:** Apply non-AI filters first to reduce the row count before the AI task 2. **Limit the context columns:** Select only the columns the prompt needs rather than leaving every column as context 3. **Keep results you have already generated:** Once a classification is accepted, don't re-run it on old rows—store the result and apply AI only to new rows 4. **Use incremental processing:** Run AI tasks only on new or changed rows, using the time-window extraction pattern ### Consistency across runs AI models can produce slightly different outputs for the same input across runs. For production pipelines: 1. Run the classification once and store the result 2. In subsequent runs, apply AI only to new rows and use the stored result for existing rows 3. Periodically re-validate a sample to detect model drift ### Monitoring AI tasks If the selected key hits its provider's rate limit, the Generative AI panel shows a warning. Add a [Data Check](https://mammoth.io/docs/guides/advanced/validation/) after the AI task (for example, a Null percentage check on the generated column) so empty or failed generations are caught instead of silently flowing downstream. ## When not to use AI transforms AI transforms add latency and cost. Use standard transforms when they are sufficient: | Task | Use this standard task instead | | --- | --- | | Mapping known values to categories | **Bulk Replace** or **Find & replace**: faster and deterministic | | Arithmetic on numeric columns | **Math function**: exact, no cost | | Filtering by exact value | **Conditional Filter**: instant | | Extracting structured substrings | **Extract Text** | | Renaming or recasing text | **Text formatting** | --- # API workflows URL: https://mammoth.io/docs/guides/advanced/api-workflows/ · Updated: 2026-11-02 Trigger Mammoth automations through the REST API, poll for completion, fetch View data, and push results to external systems, with Python examples. Mammoth's REST API lets external systems trigger automations and monitor their status programmatically. This guide covers the trigger options, how to fetch results, and integration patterns such as fan-out, fan-in, and retry. A file-arrival trigger already exists for Data Consolidation automations (see Pattern 3 in [Incremental processing](https://mammoth.io/docs/guides/advanced/incremental/)). To push data into Mammoth from an external system, see [Webhook data push](#webhook-data-push). ## Trigger patterns ### API trigger (production) Trigger an automation from any external system using Mammoth's REST API. Use this when you need to kick off a pipeline run from CI/CD, a scheduler, or another backend service. ```http PATCH /api/v2/workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id} Authorization: Bearer {api_token} Content-Type: application/json {"patch": [{"op": "command", "path": "run"}]} ``` **Supported scenarios:** - CI/CD pipeline completes a deployment → trigger a data refresh for release metrics - Scheduled job in an external system → trigger a Mammoth automation at a precise time - Business system completes processing → kick off downstream data pipeline ### Schedule trigger (production) Configure automations to run on a time-based schedule (daily, weekly, monthly) without any external system integration. See [Automations](https://mammoth.io/docs/learn/automations/) for the full setup guide. ### File-arrival trigger (production) A Data Consolidation automation watches a source Data Library folder and picks up files as they are added—no API call, polling, or scheduled run time needed. This is already available; see [Incremental processing → Pattern 3](https://mammoth.io/docs/guides/advanced/incremental/) for the full setup. ### Webhook data push To send data into Mammoth from systems such as Shopify, Stripe, or Salesforce, create a webhook dataset. The external system POSTs its payload to the dataset's webhook URL and Mammoth ingests it. See [Triggers](https://mammoth.io/docs/learn/automations/triggers/#webhook-data-ingestion) for setup. To start a pipeline run from an external event, call the API trigger above. ## Push patterns: Sending results to external systems ### Export via API after pipeline completion After a pipeline runs (triggered by API or schedule), fetch its results via the dataview's data endpoint: ```http GET /api/v2/workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data Authorization: Bearer {api_token} ``` This returns an async **Job**. Poll it until its `status` resolves (`success`, `failure`, `processing`, or `error`), then read the result rows. For an actual downloadable CSV/Excel file rather than JSON rows, add an export step to the pipeline itself—that's configured in the pipeline, not requested ad hoc through this endpoint. **Use cases:** - Pull clean data into a downstream system after Mammoth processing - Feed Mammoth output into a BI tool or warehouse via a scheduled script - Integrate Mammoth into a broader data orchestration workflow (Airflow, Prefect, etc.) ### Notifying another system on completion Messaging delivers by email. To notify another system when a run finishes, poll the automation or Job status as shown in this guide, then POST to your own endpoint from your system. ### Direct API write via external system For writing results back to an API, the pattern requires an intermediary: 1. Mammoth prepares the transformed data 2. **Export** → **Databases** to BigQuery, PostgreSQL, SQL Server, or Redshift (kept current by Auto-sync on each pipeline run) 3. A lightweight external script (Cloud Function, Lambda, [Make.com](https://www.make.com) webhook) reads from that database and writes to the target API Mammoth does not write to arbitrary APIs. Use it for transformation and delegate API writes to a purpose-built integration tool. --- ## Mammoth's external API Mammoth's REST API allows external systems to trigger and monitor automations programmatically. The active API is versioned at `/api/v2`. ### Key endpoints **Trigger an automation:** ```http PATCH /api/v2/workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id} Authorization: Bearer {api_token} Content-Type: application/json {"patch": [{"op": "command", "path": "run"}]} ``` **Get an automation's last run status:** ```http GET /api/v2/workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id} Authorization: Bearer {api_token} # Returns last_run and last_run_result: Mammoth surfaces the most recent run, not a full run history ``` **Fetch a View's data:** ```http GET /api/v2/workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}/data Authorization: Bearer {api_token} # Async job: poll until status is "success", then read the result ``` **Check View status:** ```http GET /api/v2/workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id} Authorization: Bearer {api_token} # Returns row_count, status, pipeline_status: there's no last-refreshed timestamp field ``` ### API authentication API credentials are **API tokens**, created in **Workspace settings → API Tokens**. A token starts with `mm_` and belongs to one workspace, not to an individual user; it can also be limited to one project, and then gets HTTP 403 in every other project. Requests send it as `Authorization: Bearer {api_token}`; no workspace header is needed, and the workspace id in the URL path must be the token's own workspace. The older `X-API-KEY` and `X-API-SECRET` headers are deprecated. See [Authentication](https://mammoth.io/docs/build/auth/). **Security:** - A token is shown only once—store it securely in your secrets manager - Rotate credentials when team members change or access needs change ### Polling pattern for long-running pipelines For pipelines that take minutes to complete, use polling rather than synchronous waiting: ```python import requests import time headers = { "Authorization": f"Bearer {api_token}", } # Trigger the automation requests.patch( f"https://app.mammoth.io/api/v2/workspaces/{workspace_id}/projects/{project_id}/automations/{automation_id}", headers=headers, json={"patch": [{"op": "command", "path": "run"}]}, ) # Poll the View for the refreshed status while True: view = requests.get( f"https://app.mammoth.io/api/v2/workspaces/{workspace_id}/projects/{project_id}/datasets/{dataset_id}/dataviews/{dataview_id}", headers=headers, ).json() if view["pipeline_status"] == "ready": break elif view["pipeline_status"] == "error": raise Exception(f"Pipeline failed for dataview {dataview_id}") time.sleep(30) # Check every 30 seconds print("Pipeline completed. Fetching results...") ``` ## Integration patterns ### The fan-out pattern One file drop can already trigger multiple independent automations today. Create a separate Data Consolidation automation on the same source folder for each downstream pipeline that needs to react. Each one runs automatically whenever a file is added to the folder; Data Consolidation has no schedule or trigger setting to configure. For fan-out from other external events, call each automation's API trigger endpoint in turn from your external system. ### The fan-in pattern Multiple Mammoth automations must all complete before a downstream pipeline runs. Use a coordination layer outside Mammoth: 1. Each upstream Mammoth automation is triggered via API 2. Your coordination script polls each automation's status until complete 3. When all prerequisites finish, it triggers the downstream automation via the API ### The retry pattern For flaky source systems (APIs that occasionally return errors or empty responses): 1. Trigger the automation via API 2. Poll for completion—if status is `error`, inspect the failure 3. Retry by triggering it again up to N times with a delay between attempts 4. If all retries fail, alert via your external notification system --- # Custom transforms URL: https://mammoth.io/docs/guides/advanced/custom-transforms/ · Updated: 2026-11-02 Build complex transformation logic in Mammoth by chaining tasks, using the Generative AI task, pre-processing in SQL, and two-pass patterns, with examples. Mammoth's visual pipeline covers most transformation needs, but some business logic is too complex for a single task. This guide is for data engineers and advanced analysts. It covers four techniques for advanced logic: chaining standard tasks, using the Generative AI task as a programmable transform, pre-processing in the source system, and two-pass processing. It ends with what Mammoth cannot do. ![Five-step chain for tiered discounts: two Label & Insert Values, two Math Function, then Remove Column.](https://mammoth.io/docs/images/20260805_052136_custom-transforms-tiered-pricing-chain1.webp) \ These five tasks together implement tiered-discount pricing: BaseDiscountRate, VIPMultiplier, EffectiveDiscountRate, DiscountedPrice, then drop the scaffolding columns. ## Technique 1: Chaining steps for complex logic Most complex logic can be broken into sequential simple tasks. Intermediate columns do not need to be in the final output. They are scaffolding that you drop at the end. ### Example: Tiered pricing with volume discounts Business rule: "Apply a 5% discount for orders 10–24 units, 10% for 25–49, 15% for 50+. But if the customer is a VIP account, apply 1.5× the standard discount tier." Implementation: 1. **AI SQL Query**: `BaseDiscountRate = CASE WHEN Quantity >= 50 THEN 0.15 WHEN Quantity >= 25 THEN 0.10 WHEN Quantity >= 10 THEN 0.05 ELSE 0 END` (or use **Label & Insert Values** with a condition on **Some cells** once per tier) 2. **AI SQL Query**: `VIPMultiplier = CASE WHEN AccountTier = 'VIP' THEN 1.5 ELSE 1.0 END` 3. **Math Function**: `EffectiveDiscountRate = "BaseDiscountRate" * "VIPMultiplier"` 4. **Math Function**: `DiscountedPrice = "UnitPrice" * (1 - "EffectiveDiscountRate")` 5. **Remove Column**: drop `BaseDiscountRate` and `VIPMultiplier` from the output Each task is simple and auditable. Together they implement the tiered logic. ### Example: Running balance calculation Business rule: "Calculate the running account balance after each transaction (deposits add, withdrawals subtract, ordered chronologically per account)." Implementation: 1. **AI SQL Query**: `SignedAmount = CASE WHEN TransactionType = 'Deposit' THEN Amount ELSE Amount * -1 END` 2. **Window function**: function **Sum** on `SignedAmount`, Type **Accumulate**, Group by `AccountID`, Add Sort on `TransactionDate` ascending, placed in a new `RunningBalance` column 3. **Remove Column**: drop `SignedAmount` if not needed in output The Window function task handles the ordered running sum natively, so no looping is needed. ## Technique 2: Generative AI as a programmable transform The **Generative AI** task can implement transformation logic that does not fit any standard task. Think of it as a programmable transform where the "code" is a natural language instruction. (This is a different feature from the AI Prompt search bar, which generates pipeline tasks from a typed instruction. This technique is about the Generative AI task itself.) ### When to use Generative AI as a transform - Complex conditional logic with many branches (>10 conditions) - Business rules that reference external knowledge (e.g., "classify this product into our taxonomy") - Free-text parsing where regex isn't sufficient - Multi-criteria scoring that would require many condition-based tasks ### Structured output from Generative AI The task's output column is always text, so for the result to be usable in downstream steps, force the model to return a consistent, parseable string: **Single value output:**\ `"Return only a single word from this list: 'Core', 'Premium', 'Enterprise'. No explanation."` **Multi-field output (JSON):**\ `"Parse this address into JSON with keys 'street', 'city', 'state', 'zip'. Return only valid JSON, no explanation."` For JSON output, add an **Extract JSON** task after Generative AI to pull each JSON key into its own column. **Numeric output:**\ `"Score the quality of this product description from 0 to 10. Return only the number."`. The result is still a text column; add a Math Function task afterward if you need to use it as a number. ### Multi-step logic in one Generative AI call For complex rules that would require many condition-based tasks: `Using the Amount, DaysToClose, StakeholderCount, and DaysSinceLastActivity columns, apply our deal scoring rubric:` - `Size >= $100K and close <= 30 days → "Hot"` - `Size >= $50K and close <= 60 days and last activity <= 7 → "Warm"` - `Last activity > 30 days → "Stale" (regardless of other factors)` - `Otherwise → "Pipeline"` `Return only one word: Hot, Warm, Stale, or Pipeline.` This single Generative AI task replaces many nested condition-based tasks. Select the referenced columns (Amount, DaysToClose, and so on) as the task's context columns. Generative AI supports up to 20 context columns, well above what a rule like this needs. ## Technique 3: Pre-processing at the source Some transformations are better done in the source system before data enters Mammoth. ### Pre-processing in SQL If your source is a SQL database with a Live Connection, use the SQL query box when adding the data to perform the complex logic before it enters Mammoth: ```sql SELECT o.*, DATEDIFF(o.close_date, o.created_date) AS days_to_close, CASE WHEN o.amount >= 100000 THEN 'Enterprise' WHEN o.amount >= 25000 THEN 'Mid-Market' ELSE 'SMB' END AS deal_size_tier, u.name AS owner_name, u.region AS owner_region FROM opportunities o JOIN users u ON o.owner_id = u.id WHERE o.stage NOT IN ('Closed Lost') ``` Benefits: - SQL runs at database speed - Reduces the data volume sent to Mammoth - Leverages database indexes for filtering and joining - Complex SQL window functions often outperform Mammoth equivalents for very large datasets Tradeoffs: - Logic is in the SQL query, not in the Mammoth pipeline (less visible to non-SQL analysts) - Changes require SQL access, not just Mammoth editor access - Mammoth's visual audit trail doesn't cover logic in the source query ### Exporting from a BI tool For transformations already defined in another BI tool (Tableau calculated fields, Power BI measures, Salesforce reports), export the result as a file rather than re-implementing the logic in Mammoth. Import the pre-calculated file and join it to Mammoth datasets. ## Technique 4: Two-pass processing Some transformations need context from the full dataset before individual rows can be processed. The two-pass pattern handles this. **Example: percentile-based segmentation** To assign each customer to a revenue tier based on where they fall in the distribution, you can often skip the two-pass pattern: a **Window function** with **Percent rank** or **N tile** on the revenue column (Type **Aggregate**) adds the rank to every row in one step. When you need your own thresholds instead: 1. **First pass:** `Group & Pivot` to calculate summary statistics for the full dataset: `Min`, `Max`, `Average` 2. Send these to a single-row reference dataset 3. **Second pass:** `Lookup` each customer record against the reference dataset to join the thresholds 4. `Label & Insert Values` (with a condition on **Some cells**) or **AI SQL Query**: compare each customer's revenue to the thresholds → assign tier The first pass gives you the distribution context; the second pass applies it per row. **Example: Z-score normalization** 1. **First pass:** `Group & Pivot` → `AVG(Value)` as `Mean`, `STDDEV(Value)` as `StdDev` 2. **Second pass:** `Lookup` each row to the Mean and StdDev values 3. `Math Function`: `ZScore = ("Value" - "Mean") / "StdDev"` ## What Mammoth cannot do Some transformations require code: - Recursive calculations (hierarchical rollups with arbitrary depth) - Matrix operations or linear algebra - ML model inference (beyond what the Generative AI task can do) - Complex text parsing with backtracking regex For these cases, the recommended pattern: 1. Process the data in Mammoth up to the point where you need custom code 2. Export to BigQuery (or another database destination) where you can use SQL UDFs or Python UDFs 3. Import the result back into Mammoth for final transformation and delivery Or, for data engineering teams: perform the custom computation in Python/dbt as a pre-processing step and bring the result into Mammoth as a source dataset. --- # Dataset lifecycle workflows URL: https://mammoth.io/docs/guides/advanced/dataset-workflows/ · Updated: 2026-11-02 Manage the dataset lifecycle in Mammoth with dev, staging and production separation, View versioning, change control, rollback plans and deprecation. This guide is for data architects and administrators who run Mammoth in production. As your deployment matures, you need to manage datasets over time: test changes before they affect production dashboards, version Views that other pipelines depend on, and deprecate old datasets without breaking downstream consumers. It covers environment separation, versioning, branching, change management, and deprecation. ![Promotion path: Dev (sample data), Staging (full-volume validation), Production (versioned View with change control).](https://mammoth.io/docs/images/20260805_052024_dataset-workflows-environment-promotion1.webp) ## Environment separation ### The three-environment model For production-grade Mammoth deployments, separate work into three logical environments: **Development (Dev):** - Where data engineers build and test new pipelines - Uses a sample of production data (not full volume) - Outputs go to Dev-prefixed datasets: `dev_sales_summary` - No external stakeholders access Dev datasets **Staging:** - Where new pipelines are validated before production - Uses recent full-volume data - Outputs go to Staging-prefixed datasets: `stg_sales_summary` - Internal stakeholders (analytics team) validate accuracy **Production:** - Where dashboards and downstream systems consume data - Runs on the full dataset with the full schedule - Outputs are versioned Views: `sales_summary_v3` - Change control applies: no direct edits to production pipelines ### Implementing environments in Mammoth Mammoth has no built-in environments, but you can implement them with folder structure and naming conventions: ```plaintext Data Library/ ├── _dev/ │ ├── [engineer_name]/ │ │ └── pipeline-in-progress/ ├── _staging/ │ └── validated-before-promotion/ └── Shared/ # Production layer └── sales_summary_v3/ ``` Mammoth's role-based access is project-level, not per-folder, so a folder naming convention alone does not stop someone with edit access to the project from writing to `Shared/`. Project roles are Project Admin and Project Editor, and both can change data in the project. To actually enforce the separation, put Dev/Staging in a project scoped to the data engineering team, and add only the people who should be able to promote to the Shared project as its members; give other teams access to the results through dashboards shared as Dashboard Viewer, or through an export. ## Dataset versioning ### When to create a new version Create a new version of a Shared View when: - The schema changes (columns added, renamed, or removed) - The business logic changes in a way that affects values (not just performance) - You want to test the new logic against the old in parallel before switching **Do not create a new version for:** - Performance improvements with identical output - Bug fixes that correct wrong values (these should update the existing version, with documentation) - Adding columns that don't affect existing columns ### Version naming Use semantic versioning in View names: - `customer_master_v1` → `customer_master_v2` for breaking schema changes - For minor additions that don't break consumers: document the change in the description, don't bump the version ### Version migration process 1. Build the new version in `_dev/`, test thoroughly 2. Promote to `_staging/`, and have existing consumers validate the new version against their expected outputs 3. Announce to consumers: "v2 is available in staging, v1 will be deprecated on [date]" 4. Promote v2 to `Shared/` 5. Give consumers 30 days to migrate their pipelines from v1 to v2 6. After migration deadline: mark v1 as deprecated in its description, stop refreshing it 7. Confirm no pipeline still references v1 as a source, then archive it. Mammoth's Activity Log records edit, create, and delete events, not passive "last viewed" access, so checking pipeline references is the reliable way to confirm nothing depends on it ## Pipeline branching for experimentation When you want to try a new approach without touching the production pipeline: ### Branch-and-compare pattern 1. Duplicate the production pipeline: `sales_kpi_v3` → `sales_kpi_v3_experiment` 2. Make changes to the experiment version 3. Run both in parallel on the same input data 4. Add a **comparison View** that joins both outputs on the primary key and highlights differences 5. If the experiment is better: promote it, deprecate the old version ### A/B logic testing For testing two different business logic implementations: 1. Run both logic pipelines on the same dataset 2. The comparison View shows: rows where outputs agree, rows where they differ, magnitude of difference 3. Present both options to business stakeholders—let them choose which is correct 4. Document the decision in the winner's pipeline description ## Change management for production pipelines ### Promotion checklist Before promoting a pipeline change to production: - [ ] Tested on sample data in Dev - [ ] Tested on full recent data in Staging - [ ] Output compared to previous version (no unexpected changes in values) - [ ] Row count within expected range - [ ] Validation/quality checks pass - [ ] All downstream consumers notified (if schema changed) - [ ] Pipeline description updated with what changed and why - [ ] Rollback plan documented (can you revert to previous version if issues appear?) ### Rollback plan For every production pipeline, document: - What the output looks like if the current run fails (does the View use stale data or produce nothing?) - How to revert to the previous version (do you have a copy of the previous pipeline configuration?) For critical pipelines, keep the previous version's output in a `_backup/` dataset until the new version has run successfully 3 times. ## Dataset deprecation ### Steps to retire a dataset 1. **Identify consumers:** Mammoth's Activity Log records mutation events (created, edited, renamed), not passive access, so it cannot tell you who is merely reading a dataset. Instead, check which pipelines and dashboards still reference it as a source; a dataset with no upstream references is a real deprecation candidate. 2. **Announce deprecation:** Add to the dataset description: "DEPRECATED: will be removed on [date]. Use [replacement] instead." 3. **Notify direct consumers:** If you know who uses the dataset, message them directly. 4. **Wait period:** 30 days minimum for non-critical datasets; 60 days for anything with known consumers. 5. **Archive:** Stop the refreshing automation but keep the dataset in a `_archive/` folder for 90 days in case questions arise. 6. **Delete:** After 90 days in archive with no pipeline referencing it, delete the dataset. ### Tracking deprecated datasets Maintain a deprecation log in the master data catalog document: | Dataset | Deprecated | Reason | Replacement | Removal date | | --- | --- | --- | --- | --- | | `raw_sf_leads_v1` | 2026-03-01 | Schema change | `raw_sf_leads_v2` | 2026-06-01 | | `marketing_weekly_old` | 2026-02-15 | No longer used | None | 2026-05-15 | ## Handling breaking changes gracefully When you must make a breaking change (unavoidable schema change that affects downstream consumers): 1. **3-week notice rule:** Announce breaking changes at least 3 weeks in advance 2. **Parallel period:** Run both old and new versions for 2 weeks 3. **Migration support:** Offer to help consumers update their pipelines (most are small changes to a source reference) 4. **Verified migration:** Before removing the old version, verify no pipeline still references it as a source. The Activity Log does not show read access, only edit, create, and delete events The goal is to make breaking changes manageable, not to avoid them entirely. --- # Enterprise architecture patterns URL: https://mammoth.io/docs/guides/advanced/enterprise-patterns/ · Updated: 2026-11-02 Organize workspaces, projects and roles in large Mammoth deployments, standardize pipelines, share certified Views across teams, and use a governance checklist. At enterprise scale, the technical challenges of Mammoth become organizational: how does the marketing team share clean data with finance without giving them access to raw CRM records? How does a central data team govern a workspace used by 12 departments? This guide is for enterprise architects and administrators. It covers workspace organization, role design, pipeline standards, cross-team sharing, cataloging, and a governance checklist. ## Workspace organization ### Single workspace versus multiple workspaces **Single workspace**: all teams in one Mammoth workspace: - Simpler administration, one billing account - All data is in one place, which makes cross-team joins easier - Requires careful RBAC to prevent accidental data access - Best for: companies with a single data governance model **Multiple workspaces**: separate workspaces per department or environment: - Hard data isolation between departments - Each workspace has its own billing, user management, and admin - Cross-workspace data sharing via exported files or shared warehouse tables - Best for: enterprises with distinct data governance requirements per business unit, or separate legal entities **Recommendation for most enterprises:** single workspace with well-designed RBAC. Multiple workspaces add administrative overhead and makes cross-team analytics harder. Move to multiple workspaces only when regulatory or organizational requirements mandate it. ### Folder structure Organize the Data Library with a consistent folder hierarchy: ```plaintext Data Library/ ├── Raw/ # Unmodified source data │ ├── CRM/ │ ├── Finance/ │ └── Operations/ ├── Staging/ # Intermediate pipeline outputs │ ├── CRM/ │ └── Finance/ ├── Shared/ # Certified, cross-team Views │ ├── customer_master/ │ ├── product_catalog/ │ └── date_dimension/ └── Department/ # Department-specific datasets ├── Marketing/ ├── Sales/ └── Finance/ ``` The `Shared/` folder contains the certified datasets that multiple teams consume. Data engineers own these; analysts reference them via **Lookup**. Folders in the Data Library are an organizational convention, not an access-control boundary. Mammoth does not support per-folder permissions. The layout above only works if it's paired with the project-level RBAC described next. ## Role design at scale Mammoth's permission model is layered, not a single flat role list: - **Workspace roles:** Owner and Member—control who can administer the workspace (users, billing, API keys) and who can create projects - **Project roles:** Project Admin and Project Editor—control what a user can do with data inside a given project (Data Library, pipelines, Views). This is the level enterprise governance mostly operates at, since access is granted per project, not per folder - **Dashboard roles:** Dashboard Editor and Dashboard Viewer—control who can edit a dashboard and who can only view it ### Recommended role mapping | Organizational role | Mammoth role | Scope | | --- | --- | --- | | Data engineer | Project Admin | Full project: can edit pipelines and manage the Data Library | | Analytics engineer | Project Editor | Build and edit Views/pipelines; no project administration | | Department analyst | Project Editor (own project) | Full data access in their team's project; add them only to projects they need | | Business user | Dashboard Viewer | Read-only access to dashboards | | External stakeholder | Dashboard Viewer (shared link) | Specific published dashboard only | | Workspace administrator | Workspace Owner | User management, billing, workspace-wide settings | Because Mammoth has no per-folder permissions, teams that need hard data isolation (not just an organizational convention) should use **separate projects**, not separate folders within one project. The project is the real permission boundary. ### Access control for sensitive data For datasets containing PII, financial data, or regulated content: 1. Keep these datasets in a project scoped to the people who need them (a restricted `CRM/PII` folder is a naming convention for humans, not an access barrier) 2. Create a de-identified View in a separate shared project, and give other teams access to what is built from it (for example, dashboards shared as Dashboard Viewer) 3. Document the de-identification approach in the View description ### Shared View pattern The most important governance pattern: analysts never access raw data directly. Instead, the data engineering team: 1. Ingests and cleans raw data (as Project Admin/Editor on the raw/staging project) 2. Creates a certified View in a shared project (e.g., `customer_master_v2`) 3. Shares dashboards built on that View with other teams as Dashboard Viewer, or exports the View to them 4. Analysts build their analyses from the Shared View's outputs When the underlying data structure changes, only the pipeline between raw and the Shared View needs updating—all downstream analyst work is insulated. ## Pipeline standardization At scale, inconsistency in pipeline design becomes a maintenance burden. Standardize across teams: ### Naming conventions Establish naming conventions for all pipeline artifacts: | Artifact | Convention | Example | | --- | --- | --- | | Raw datasets | `raw_{source}_{object}` | `raw_sf_opportunities` | | Staging datasets | `stg_{source}_{object}` | `stg_sf_opportunities` | | Shared Views | `{domain}_{entity}_{version}` | `crm_customers_v3` | | Automations | `{team}_{cadence}_{purpose}` | `finance_daily_gl_consolidation` | ### Pipeline documentation standard Every pipeline task description should answer: **what does this task do, and why?** Bad: `"Filter task"`\ Good: `"Filter to active customers only (Status = 'Active'). Excludes churned accounts per revenue recognition policy. Last reviewed 2026-01-15."` This matters for audit, onboarding new team members, and debugging failures 6 months after build. ### Transformation layer separation Separate pipelines into three layers: - **Raw layer:** exact copy of source data, no transformations - **Staging layer:** type casting, basic normalization, and column renaming, one-to-one with source tables - **Shared layer:** business logic, joins, aggregations, certified for consumption Each layer is a separate pipeline. This separation makes it possible to change source extraction without breaking business logic, and vice versa. ![Three layers: raw datasets, staging datasets (type casts, renames), then certified shared Views such as crm_customers_v3.](https://mammoth.io/docs/images/20260805_052518_enterprise-patterns-three-layer-architecture1.webp) ## Cross-team data sharing ### Shared Views as contracts A Shared View is a contract between the data engineering team and consumers. Treat it like an API: - Version the View name when the schema changes: `customer_master_v2` → `customer_master_v3` - Maintain the previous version while consumers migrate - Announce deprecation with a timeline in the View description - Never change a Shared View schema silently ### Reference datasets Some datasets are consumed by many pipelines: product catalogs, date dimensions, exchange rate tables, geography hierarchies. Maintain these in `Shared/Reference/` and treat them as first-class assets: - Data engineering owns them - Changes go through a review process - Version history is maintained - All pipelines that consume them document which version they reference ### Publishing Views for external access For data that needs to go outside the workspace: 1. **Download** (CSV/Excel) or a **Live Link** for spreadsheet consumers 2. **Export** → **Databases** (BigQuery, PostgreSQL, SQL Server, Redshift) for warehouse consumers, kept current by Auto-sync on each pipeline run 3. **Publish** → shareable link for business users who need visualization without Mammoth access 4. An **SFTP** export task attached to the pipeline for legacy systems that consume files ## Data catalog and lineage ### Documenting the data estate For enterprise deployments, the Data Library's metadata fields serve as a lightweight data catalog: - **Dataset description:** what this data is, where it comes from, who owns it - **Pipeline task descriptions:** what each transformation does and why - **View description:** what the View represents, who the intended consumers are, what business questions it answers Maintain a master catalog document (Google Doc or Notion) that lists all Shared Views with: - Name and version - Owner - Business domain - Upstream sources - Downstream consumers - Refresh schedule - Last reviewed date ### Lineage visibility The pipeline visualization in Mammoth shows the transformation chain for any dataset. For audit and debugging, this answers: "where did this number come from?" For complex lineage that crosses multiple pipelines and datasets, document the full lineage in the master catalog document. Mammoth's visual lineage covers within-pipeline lineage but not cross-pipeline dependencies. ## Governance checklist for enterprise deployments **Access and security:** - [ ] Project/workspace roles defined and mapped to organizational roles - [ ] PII and sensitive data isolated in a restricted project (not just a labeled folder) - [ ] All access reviewed quarterly - [ ] Activity Log exported periodically for audit records (export requires an Enterprise plan) **Pipeline standards:** - [ ] Naming conventions documented and enforced - [ ] All Shared Views have descriptions and owners - [ ] Transformation layer separation implemented - [ ] All pipeline tasks have descriptions (not just names) **Operations:** - [ ] Critical automations have failure notifications configured (Messaging automation, or a Checkpoint Alert task in the pipeline) - [ ] Row count and data quality checks (Data Check task) in all critical pipelines - [ ] Automation status (last run success/failure) reviewed regularly by data engineering team - [ ] Data freshness SLAs documented for each Shared View **Change management:** - [ ] Shared View versioning process documented - [ ] Change notification process for Shared View consumers - [ ] Rollback procedure documented for each critical pipeline --- # Incremental processing URL: https://mammoth.io/docs/guides/advanced/incremental/ · Updated: 2026-11-02 Choose between full refresh and incremental processing in Mammoth, with patterns for time windows, append-only data, file intake, CDC and late-arriving data. Full refresh is the simplest pipeline pattern: every run reads all source data, transforms it, and overwrites the output. It works well until the dataset gets large enough that it becomes slow, expensive, or both. Incremental processing solves this by only processing data that has changed since the last run. This guide is for data engineers and operations managers. It compares the two approaches and then describes four incremental patterns, how to handle late-arriving data, and performance options. ![Full refresh overwrites all output each run; incremental processes only changed rows and merges them into existing output.](https://mammoth.io/docs/images/20260805_052613_incremental-full-refresh-vs-incremental1.webp) ## When to use incremental processing instead of full refresh | Characteristic | Use full refresh | Use incremental | | --- | --- | --- | | Dataset size | < 500K rows | > 500K rows | | Source API rate limits | No concern | Tight limits | | Pipeline runtime | < 5 minutes | > 5 minutes | | Historical data changes | Yes (corrections are common) | No (append-only source) | | Source has change tracking | Not required | Required (timestamp or CDC) | Start with full refresh. Switch to incremental when full refresh becomes a problem, not before. ## Pattern 1: Time-window extraction The simplest incremental pattern: extract only records created or modified within a time window. ### Setup 1. Add a **Conditional Filter** task as the first transformation task after ingestion, comparing a date/timestamp column against a cutoff value: - `CreatedAt >= `: for append-only data (orders, events, transactions) - `UpdatedAt >= `: for data that can be updated (customers, accounts, statuses) 2. The Conditional Filter task compares against a fixed value you set when configuring it. It does not support relative-date macros like "yesterday" evaluated automatically at runtime. For a true rolling window without manually updating that cutoff on a schedule, use Pattern 2 or Pattern 3 below, which handle the incremental logic through a real Mammoth automation instead of a self-maintained date filter. ### Output strategy - For the **main View**: set write mode to **Combine**: new rows add to existing data - For the **destination** (BigQuery): set write mode to **Merge**: new rows insert, changed rows update **Window size:** Use a 2-day or 48-hour lookback window instead of exactly 24 hours. This buffer catches: - Late-arriving records (source systems often have processing delays) - Records that were updated after the previous run's cutoff time - Timezone edge cases The Merge write mode matches rows on the reference column you pick (typically the primary key), so the 2-day overlap does not create duplicates. It only ensures coverage. ## Pattern 2: Append-only pipeline For source data that only grows (transaction logs, events, audit records): ### Setup 1. Source ingestion: filter to the last N days (or use a file-arrival-triggered automation for batch files—see Pattern 3) 2. All transformation tasks apply to only the new rows 3. Output: **Combine** into the master View—never Replace, which would erase prior history ### Append master View The master View accumulates all historical data. Structure it as follows: - One row per event or transaction, never aggregated at this layer - `LoadedAt` column: timestamp of when this row was added to the master View - `SourceFile` column (for file-based sources): which file this row came from, which is useful for debugging ### Deduplication for append pipelines If the source can produce duplicate records (retries, reprocessing), add a deduplication task: 1. After appending new rows, add a **Group & Pivot** task that deduplicates on primary key 2. Select the "take most recent" row where duplicates exist: `MAX(LoadedAt)` per primary key 3. This View becomes the deduplicated master, separate from the raw append View ## Pattern 3: File-based incremental (intake folder) For batch file sources that drop files on a schedule: 1. Source files land in a Data Library folder: `Intake/Sales/` 2. A **Data Consolidation** automation watches the source folder and picks up files as they are added (no scheduled run needed), processing new files only 3. Each file's rows are appended to the master dataset 4. Processed files are moved to `Intake/Sales/Processed/` (file management task) **Tracking which files have been processed:** - Add a `SourceFilename` constant column when processing each file - The master dataset records which file each row came from. This is the reliable audit trail, since the automation itself only surfaces its most recent run status, not a full run history ## Pattern 4: Change data capture (CDC) For databases that track changes natively: ### Using updated_at timestamps If the source database has an `updated_at` or `modified_date` column: 1. Query with: `WHERE updated_at > ''` 2. Merge into destination on primary key The challenge: deleted records. If a row is deleted from the source, it won't appear in the extract (and therefore won't be removed from the destination). Options: - Accept soft-delete semantics: add a `DeletedAt` column that's populated when a record is deleted - Periodically run a full refresh to reconcile (daily incremental + weekly full refresh) ### Using a sequence column or ID For append-only tables with auto-incrementing IDs, configure the source's **unique sequence column** on the refresh automation. Mammoth tracks the last-seen ID internally between runs and only pulls rows past it. There is no separate "automation variable" to manage; it is a per-dataset setting on the automation. This is efficient and reliable for tables where IDs are monotonically increasing. ## Handling late-arriving data Late-arriving data (records that belong to a past period but arrive after it was processed) is the hardest problem in incremental processing. **Sources of late arrival:** - POS systems with offline mode: transactions recorded offline, synced later - EDI/B2B: partners submit data days after the event - Event processing queues: events can arrive out of order **Strategies:** 1. **Extended lookback window:** Instead of 24-hour lookback, use 7-day lookback. Any record with `UpdatedAt >= 7 days ago` is reprocessed. The Merge write mode ensures no duplicates. Works if volume allows it. 2. **Late arrival flag and restatement:** Accept that historical periods may need correction. Add a `NeedsRestatement` flag to periods that received late data. Run a full restatement for flagged periods monthly. 3. **Frozen periods:** Mark historical periods as "frozen" after a close date. Late-arriving data for frozen periods goes to a `late_arrivals` dataset for manual review rather than automatically modifying the frozen output. ![Flow: new records append to master; events older than 7 days go to late_arrivals for steward review and manual correction.](https://mammoth.io/docs/images/20260805_052651_incremental-late-arrival-handling1.webp) ## Performance optimization options | Optimization | When to apply | | --- | --- | | Reduce lookback window | When incremental runtime is still too long | | Push aggregation to source SQL | Before data lands in Mammoth | | Partition output by date | For large Views queried by date range | | Remove unused columns early | Column select task immediately after ingestion | | Schedule incremental during off-peak | Reduce load on source database | --- # Advanced patterns URL: https://mammoth.io/docs/guides/advanced/ · Updated: 2026-11-02 Architecture patterns for complex, high-volume or multi-team Mammoth projects, including governance, validation, incremental processing, AI and API workflows. These guides are for data engineers, architects, and administrators. They cover architecture decisions for complex, high-volume, or multi-team Mammoth implementations, and assume you are comfortable with core Mammoth functionality. ## Advanced guides and when to use them | Guide | What it covers | | --- | --- | | [Enterprise architecture](https://mammoth.io/docs/guides/advanced/enterprise-patterns/) | Multi-team deployments, governance, roles at scale, workspace organization | | [Data validation](https://mammoth.io/docs/guides/advanced/validation/) | Quality gates, reconciliation checks, audit-ready pipeline design | | [Incremental processing](https://mammoth.io/docs/guides/advanced/incremental/) | Large datasets, performance optimization, change data capture patterns | | [Multi-source joins](https://mammoth.io/docs/guides/advanced/multi-source/) | Joining datasets with mismatched keys, fuzzy matching, entity resolution | | [Custom transforms](https://mammoth.io/docs/guides/advanced/custom-transforms/) | Complex logic that standard tasks cannot express, using chaining, Generative AI, and AI SQL Query | | [Dataset workflows](https://mammoth.io/docs/guides/advanced/dataset-workflows/) | Dataset versioning, branching, promotion from development to production | | [AI-powered workflows](https://mammoth.io/docs/guides/advanced/ai-powered-workflow/) | Choosing between Generative AI, AI SQL Query, Bulk Replace and the AI Prompt bar, and running them in production | | [API workflows](https://mammoth.io/docs/guides/advanced/api-workflows/) | Triggering Mammoth automations through the API, polling for completion, pushing results out | | [Pull data from a REST API](https://mammoth.io/docs/guides/advanced/rest-api-import/) | Connecting a REST or Elasticsearch source with the CLI, sampling it, creating a dataset and refreshing it on a schedule | --- > Warning: Advanced content\ > These guides assume proficiency with Mammoth's core features. If you are new to Mammoth, start with the [use case guides](https://mammoth.io/docs/guides/use-cases/) before the advanced patterns. --- # Multi-source joins URL: https://mammoth.io/docs/guides/advanced/multi-source/ · Updated: 2026-11-02 Join records from different systems in Mammoth using exact keys, normalized names, composite keys, match scoring and AI matching, plus schema reconciliation. Joining data from multiple systems sounds straightforward until you discover that "Apple Inc." in your CRM is "APPLE INC" in your ERP and "Apple" in your billing system. Entity resolution, determining that these three records represent the same company, is one of the hardest problems in data integration. This guide is for data architects and engineers. It covers four matching patterns from exact keys to AI-assisted matching, a master resolution table, and schema reconciliation. ![Entity resolution: CRM, ERP and billing spellings of Apple Inc. are normalized, looked up and AI-matched to one record.](https://mammoth.io/docs/images/20260805_052742_multi-source-entity-resolution-pipeline1.webp) ## The join reliability ladder Build multi-source joins in layers, from most to least reliable: 1. **Exact key match**: join on a shared unique ID (`CustomerID`, `OrderID`). Use this whenever possible 2. **Normalized key match**: clean both sides identically before joining (lowercase, remove punctuation) 3. **Multi-field match**: join on name, country, and postal code (less likely to drift) 4. **Fuzzy match**: AI-assisted matching for cases where exact and normalized matching fails 5. **Manual resolution table**: human-maintained mapping for exceptions Use the most reliable method available and only escalate to less reliable methods for unresolved records. ## Pattern 1: Exact key matching The safest join. If both systems share a common identifier, use it directly. **Common shared keys:** - `email` address (normalize case before joining) - `phone` number (normalize format: E.164 international format) - `domain` extracted from email (`john@acme.com` → `acme.com`) - `tax_id` / EIN / VAT number - `DUNS` number (Dun & Bradstreet business identifier) - `LinkedIn company ID` (for B2B data) **Key normalization before joining:** 1. **Text formatting** task on both datasets: **Lower Case** plus **Normalize whitespace** on the key column 2. Join on the normalized key 3. Track unmatched records: after a Left join, use **Label & Insert Values** with a condition (joined column is empty) to set `UnmatchedFlag = 1` ## Pattern 2: Normalized string matching When no shared key exists, join on entity name after aggressive normalization. ### Company name normalization ```plaintext Raw: "Apple, Inc." / "APPLE INC" / "Apple Inc." / "Apple" / "Apple Incorporated" ``` Normalization tasks (apply to both datasets before joining): 1. **Text formatting**: **Upper Case** plus **Normalize whitespace** 2. **Find & replace**: remove common legal suffixes → `" INC"`, `" LLC"`, `" LTD"`, `" CORP"`, `" CO"`, `", INC."`, `" INCORPORATED"` → `""` 3. **Find & replace**: remove punctuation → `"."`, `","`, `"'"`, `"-"` → `""` 4. **Text formatting**: **Normalize whitespace** again to collapse any double spaces left behind After normalization, "Apple, Inc." / "APPLE INC" / "Apple Inc." all become `"APPLE"`, which gives an exact match. ### Address normalization For address-based joins: 1. Normalize street abbreviations: `"Street"` → `"ST"`, `"Avenue"` → `"AVE"` (Find & replace) 2. Normalize postal codes: trim, pad to consistent length 3. State/province: normalize to 2-letter code 4. Join on: `normalized_city + normalized_state + normalized_postal_code` ## Pattern 3: Multi-field probabilistic matching When single-field normalized matching is insufficient, combine multiple fields for higher-confidence matching. ### Composite match key Create a composite key from multiple normalized fields: 1. Build `CompositeKey` by combining the normalized company name, country code, and the first three characters of the postal code with **Combine columns & text**, using `|` as the separator 2. Join on `CompositeKey` across datasets, or add each field as a separate key pair in **Join** The three-field composite reduces false matches compared to name-only matching. A company called "Atlas" in Germany (postal prefix "10") is distinct from "Atlas" in the UK (postal prefix "EC"). ### Match confidence scoring After joining, calculate a match confidence score: Use **AI SQL Query** (or **Label & Insert Values** with a condition) to add one scoring column per field, then add them with **Math function**: 1. `NameMatch = CASE WHEN source_name = target_name THEN 30 ELSE 0 END` 2. `DomainMatch = CASE WHEN source_domain = target_domain THEN 40 ELSE 0 END` 3. `PostalMatch = CASE WHEN source_postal = target_postal THEN 20 ELSE 0 END` 4. `PhoneMatch = CASE WHEN source_phone = target_phone THEN 30 ELSE 0 END` 5. `MatchScore = "NameMatch" + "DomainMatch" + "PostalMatch" + "PhoneMatch"` Route records by score: - `MatchScore >= 60` → high confidence match, use automatically - `MatchScore 30–59` → review queue, human confirmation needed - `MatchScore < 30` → unmatched, escalate to manual resolution table ## Pattern 4: AI-assisted fuzzy matching For records that fail exact and normalized matching, use the **Generative AI** task to determine if two entities are the same: **Prompt template:** ```plaintext Using the source_company, source_domain, and source_city columns as Record A and the target_company, target_domain, and target_city columns as Record B, are these two records referring to the same company? Answer with only 'Match', 'No Match', or 'Uncertain'. ``` Select those six columns as the task's context columns (up to 20 are allowed). Each row of the candidate pairs dataset carries both records. **Application pattern:** 1. First run exact and normalized matching to handle the records that resolve 2. Keep only the unmatched records (Conditional Filter) 3. Create a candidate pairs dataset: for each unmatched source record, find the 3 most similar target records using normalized name similarity 4. Apply the Generative AI task to evaluate each candidate pair (a row's two records fit comfortably within the 20 context columns the task allows) 5. Records scored `Match` are added to the master resolution table 6. Records scored `Uncertain` go to manual review This approach uses AI only on the hard cases, which controls cost while solving the matching problem. ## Building a master resolution table For recurring multi-source joins, build and maintain a master entity resolution table: | SourceSystem | SourceID | MasterID | MatchMethod | MatchedAt | ReviewedBy | | --- | --- | --- | --- | --- | --- | | CRM | CRM-12345 | MASTER-001 | ExactKey | 2026-01-15 | Automated | | ERP | ERP-A4892 | MASTER-001 | NormalizedName | 2026-01-15 | Automated | | Billing | BILL-99023 | MASTER-001 | GenerativeAI | 2026-01-18 | J.Smith | Once a resolution is established, future pipeline runs use the master resolution table as the join key, so no re-matching is needed. AI and fuzzy matching only run for new, unresolved entities. **Maintenance process:** 1. New source records that don't match the resolution table go to a `pending_resolution` dataset 2. A weekly automation (with a Messaging task, which sends email) prompts a data steward to review the pending list 3. Confirmed matches are added to the resolution table 4. The pipeline re-runs and picks up the new resolutions ## Multi-source schema reconciliation Beyond entity resolution, multi-source joins require aligning schemas. **Column naming conflicts:** Source A has `customer_name`, Source B has `CustomerName`, Source C has `Name`. Rename all of them to `customer_name` before the join. **Data type mismatches:** One source stores dates as strings (`"2026-01-15"`), another as integers (`20260115`). Normalize both to ISO date format before joining. **Granularity mismatches:** One source has daily rows, another has monthly. Aggregate the daily source to monthly before joining: 1. **Group & Pivot** the daily dataset by `YearMonth + EntityID` 2. Join the monthly aggregate to the monthly source --- # Pull data from a REST API with the CLI URL: https://mammoth.io/docs/guides/advanced/rest-api-import/ · Updated: 2026-11-02 Connect a REST or Elasticsearch source with the mammoth CLI, sample it, create a dataset, and refresh it on a schedule. Needs mammoth-cli 2.2.73 or later. `mammoth-cli` 2.2.73 and later can connect a REST or Elasticsearch source, sample it, create a dataset from it, and refresh that dataset on a schedule. This guide covers the connection, the sample, the dataset and the refresh. The connector key is `generic_rest_api`, and every connector command runs in a project (`--project PROJECT_ID`). Connections, dataset creation and automations are writes. Confirm each with the person who owns the data before you run it. ```bash mammoth connector get generic_rest_api mammoth connector connection list generic_rest_api ``` The first command shows the connection fields and the query keys the connector accepts. The second lists connections you can reuse. ## 1. Create the connection Put the settings under `config`, with flat auth fields: `auth_type` (`none`, `api_key`, `bearer` or `basic`), then `username` and `password`, or `token`, or `key_name`, `key_value` and `inject_into` (`header` or `query_param`). Don't send a nested `auth` object. A backend with the fix rejects it with error 4CONN003, and an older backend saves the connection as `auth_type: none`, so the API answers 401 later. The base URL must be a public host. Localhost and private addresses are refused. ```bash # request.json (keep it private, mode 0600) # {"config": {"name": "My API", "base_url": "https://api.example.com/v1", "auth_type": "basic", "username": "u", "password": "p"}} mammoth connector connection create generic_rest_api --input request.json --yes ``` The reply holds `identity_key`. Use it as `CONNECTION_KEY` below. Error 4SUBS007 means the workspace plan doesn't include this connector. ## 2. Sample the data `query` is a JSON string, not an object. Its keys are `endpoint_path`, `http_method` (`GET` or `POST`), `request_body`, `query_params`, `data_root_path` (a JSONPath to the records), `pagination`, `flatten_nested_json` and `max_pages`. This step creates no dataset. ```bash # sample.json # {"query": "{\"endpoint_path\": \"/posts\", \"data_root_path\": \"$\", \"max_pages\": 1}", "validate": false, "data_sample": true} mammoth connector ds-config create generic_rest_api CONNECTION_KEY --input sample.json --yes ``` The reply returns real sample rows. Read the column names from `data.data_sample.dataschema`. ## 3. Create the dataset with a schedule `schedule_properties` and `recurrence_info` are required. Without them the job fails with "Invalid parameters". `on_refresh_action` is `replace` (swap the rows on each refresh) or `combine` (append). With `combine`, every refresh adds every row the API returns again, so rows duplicate. ```bash # dataset.json # {"ds_creation_type": "cloud", "dataset_spec": {"connector_key": "generic_rest_api", # "connection_key": "CONNECTION_KEY", # "query_properties": {"ds_name": "My data", "table_name": "posts", "query": ""}, # "schedule_properties": {"schedule_type": "moment", "first_pull_at": "now", "on_refresh_action": "replace"}, # "recurrence_info": {"interval": 1, "start_at": "2027-01-01T02:00:00"}}} mammoth dataset create --input dataset.json ``` ## 4. Refresh automatically ```bash # auto.json # {"description": "Refresh My data", "tasks": [{"task_type": "run_data_retrieval", "details": {"ds_details": [{"ds_id": DATASET_ID}]}}], # "conditions": [{"condition_type": "at_specific_time", "details": {"frequency": "daily", "interval": 1, "start_at": "2027-01-01T02:00:00Z"}}]} mammoth automation create 'Refresh My data' --input auto.json --yes ``` `ds_details` must be a list. A `start_at` less than 2 minutes ahead is rejected as too soon, and a past one starts now. To run the refresh once now, use `mammoth automation update AUTOMATION_ID --yes --input '{"patch": [{"op": "command", "path": "run", "value": {}}]}'`. ## Elasticsearch Use the same connection with the cluster's address as `base_url`, and `POST` on `/INDEX/_search`. Name the fields you need in `_source`. A field such as `asctime` (`2026-10-09 15:52:46,290`, with a comma before the milliseconds) breaks the load. - **Documents:** `"request_body": {"size": 500, "_source": ["@timestamp", "task"]}` with `"data_root_path": "$.hits.hits[*]._source"`. - **Counts per bucket:** `"request_body": {"size": 0, "aggs": {"c": {"composite": {"size": 10000, "sources": [...]}}}}` with `"data_root_path": "$.aggregations.c.buckets[*]"`. The columns are `doc_count` and `key.`. ## Next up - [API-driven workflows](https://mammoth.io/docs/guides/advanced/api-workflows/): trigger automations through the REST API. - [CLI reference](https://mammoth.io/docs/build/cli/): every command, with its blast radius and endpoint. --- # Data validation patterns URL: https://mammoth.io/docs/guides/advanced/validation/ · Updated: 2026-11-02 Add Data Check tasks, quality gates, quarantine Views and reconciliation checks to Mammoth pipelines, and keep audit evidence for regulated reports. A dashboard that shows wrong numbers is worse than no dashboard. Validation patterns in Mammoth catch bad data before it reaches a consumer, either by halting the pipeline and alerting, or by flagging records so analysts know which rows to distrust. This guide is for data engineers, QA analysts, and operations managers. It covers gate and flag validation, Data Check tasks, financial reconciliation, quarantine Views, audit evidence, and pre-production testing. ![Source data passes transform steps to a Data Check step; passing rows go to the View, failing rows are quarantined.](https://mammoth.io/docs/images/20260805_052244_validation-quality-gate-flow1.webp) ## Two validation philosophies **Gate validation**: the pipeline stops if data quality checks fail. Downstream consumers never see bad data because it never reaches them. The cost: analysts have no new data until the issue is resolved. **Flag validation**: the pipeline continues, but each row has a quality flag (`Valid`, `Warning`, `Invalid`). Consumers see all data, and can filter by quality flag. The cost: analysts might accidentally include flagged rows in their analysis. **When to use which:** - Use **gate validation** for financial data, regulated reports, or any output where bad data could cause decisions or legal consequences - Use **flag validation** for operational data where it's acceptable to analyze partial datasets, or when you want to surface data quality issues as a metric rather than a blocker ## Gate validation with the Data Check task The **Data Check** pipeline task is built for this. Add it directly to your pipeline rather than bolting checks onto the automation that runs it. A single Data Check task can configure multiple checks: row count, null percentage, value range, unique values, or a **Custom prompt** check (a rule you describe in plain language, which Mammoth turns into SQL), each with its own condition and tolerance. The task has one **fail action**: **Flag and continue** (the pipeline runs normally and the failure is flagged) or **Pause the pipeline** (gate validation: the pipeline stays paused until the data is fixed or approved). Use **Notify on failure** to pick recipients so a failure actually reaches someone. ### Row count check The simplest and most important check: does the output have a reasonable number of rows? 1. Add a **Data Check** task after your transformation tasks 2. Add a **Row count** check: `> 0` (catches empty output from upstream failure) 3. For time-series data, use a tolerance-based row count check against the previous run to catch unexpected drops (e.g. more than 10% below the prior run) ### Null rate check For columns that must be populated, add a **Null percentage** check on that column directly in the Data Check step (for example, `Amount` null percentage `< 5`). You do not need to precompute the rate with separate tasks. ### Range check For numeric columns with known valid ranges, add a **Value range** check in the Data Check task (for example, `Amount` between `0` and `10000000`). Set the fail action to **Flag and continue** to flag the failure for review, or **Pause the pipeline** if any out-of-range value should stop the pipeline. ### Referential integrity check Verify that foreign keys actually exist in the reference table: 1. **Lookup** the foreign key against the reference table. Unmatched rows resolve to `NULL` in the new lookup column 2. Add a **Data Check** task with a **Custom prompt** check verifying the count of unmatched rows is zero ## Financial reconciliation pattern For finance and accounting data, reconciliation is the cornerstone of data integrity: totals must match the source system at every transformation stage. ### Control total pattern 1. Extract the control total from the source system (total debits, total credits, row count), often available in a summary report 2. After each major transformation stage, compute the same total in Mammoth 3. Compare: `ControlTotal_Source = ControlTotal_After_Transform` Example for GL consolidation: ```plaintext Source GL export: 47,832 rows, total debits = $4,823,441.20 After entity normalization: 47,832 rows, total debits = $4,823,441.20 ✓ After currency conversion: 47,832 rows, total debits = $4,823,441.20 ✓ (USD base) After inter-company elimination: 46,204 rows, total = $4,318,220.15 ✓ (expected reduction) ``` ### Double-entry check For double-entry accounting data: 1. **Group & Pivot**: `SUM(Debits)`, `SUM(Credits)` 2. **Math Function**: `Imbalance = ABS(SUM(Debits) - SUM(Credits))` 3. **Data Check** task, **Custom prompt** check: `Imbalance < 0.01` (allow for rounding but not structural imbalance), fail action **Pause the pipeline** ### Period-over-period quick check For monthly financial data, large unexpected swings are a data quality signal (not always, but always worth checking): 1. **Window function**: `LAG(Total, 1)` for previous period total 2. **Math Function**: `MoMChange = ABS(Total - PrevTotal) / PrevTotal * 100` 3. Flag rows where `MoMChange > 50` for manual review. This is a quarantine flag, not a gate ## Quarantine pattern Instead of halting on bad data, route invalid rows to a separate dataset: 1. Create two Views on the same Dataset, each with its own **Conditional Filter**: - Main View: keeps `QualityFlag = 'Valid'`; this is the output consumers read - Quarantine View: keeps `QualityFlag` of `Warning` or `Invalid`; export or retain it for review 2. A data steward reviews the quarantine dataset and either: - Fixes the source and reruns - Manually corrects rows and re-merges to the main View - Documents the issue and accepts the partial dataset The quarantine pattern keeps the main View clean while preserving the bad data for investigation. "Quarantine" here is only a naming convention for the second View. Mammoth has no built-in quarantine mode. ![A Conditional Filter sends Valid rows to the main View and Warning or Invalid rows to a dated quarantine dataset.](https://mammoth.io/docs/images/20260805_052318_validation-quarantine-branching1.webp) ## Audit-ready pipeline design For regulated environments (SOX, HIPAA, Basel III), validation must leave evidence: ### Document every check Every Data Check task should have a description that answers: - What is being checked - What the threshold is - Why that threshold was chosen - Who approved the threshold Example: `"Row count must be ≥ 44,000. Threshold based on minimum expected daily transaction volume from Finance SLA agreement (Jan 2025). Approved by Controller."` ### Preserve check results 1. Each Data Check task shows its status (passed, failed, bypassed, or not run) and run details, including the result of every check, in the pipeline 2. Mammoth does not write check results to a dataset for you. If your auditors need a historical record of actual values and thresholds, keep your own audit log (for example, a dataset you append to on each review) 3. Export that audit log monthly as evidence for regulatory review ### Activity Log as audit evidence Mammoth's **Activity Log** captures every user action and every pipeline execution automatically. Exporting it requires an Enterprise plan. For SOX audits: 1. Export the Activity Log for the relevant period 2. The log shows: who triggered each pipeline and when. Pair it with your own audit log for the actual check results (values, pass/fail, thresholds), which the Activity Log does not record 3. Together, these give you documented evidence of data preparation activities. Confirm with your auditors that this meets your requirements ## Testing pipelines before production Before making a new pipeline production: 1. **Test with synthetic edge cases:** deliberately include rows with nulls, out-of-range values, and mismatched keys, and verify the validation catches them 2. **Test with last period's data:** run the pipeline against the previous period where you know the expected output, and compare results 3. **Test failure paths:** manually trigger a quality gate failure and verify the alert fires and the downstream View is not updated Document the test results in the pipeline description with the date and outcome. This demonstrates due diligence for future audits. --- # How-to URL: https://mammoth.io/docs/guides/how-to/ · Updated: 2026-11-02 Short Mammoth walkthroughs, each with a video, that show how to do one thing from start to finish, such as pulling chosen fields out of a PDF. Each page shows how to do one thing in Mammoth from start to finish, with a short video, the written steps and what to do if the result doesn't look right. - [Tell it what to pull, in plain words](https://mammoth.io/docs/guides/how-to/pull-fields-from-a-pdf/): pull chosen fields out of a PDF invoice as one clean row. --- # Tell it what to pull, in plain words URL: https://mammoth.io/docs/guides/how-to/pull-fields-from-a-pdf/ · Updated: 2026-11-02 Pull the invoice number, date, supplier and total out of a PDF as one clean row by describing the fields in plain words. A one-minute video and the steps. Invoices and reports rarely have a clean table. When you add a PDF to Mammoth, pick **Custom** and type the fields you want, like "invoice number, date, total". Mammoth pulls just those, as one row you can check against the page. [Video: Tell it what to pull, in plain words](https://mammoth.io/docs/how-to/pull-fields-from-a-pdf.mp4) ## Follow along Download the [sample invoice](https://mammoth.io/docs/samples/invoice_1041.pdf) used in the video. It's a made-up supplier invoice with no table on it, so the usual table extraction finds nothing. ## Steps 1. In **Data**, start a new dataset and upload your PDF. 2. In **Review data import**, under **What to import**, choose **Custom**. 3. Describe the fields in plain words. The video uses: *"One row per invoice: vendor, invoice number, issue date, amount due"*. 4. Click **Extract**. Mammoth reads the page using your instruction. 5. Check the row against the PDF on the left. 6. Click **Looks right**, name the dataset, then click **Create dataset**. The dataset works like any other in Mammoth: you can clean it, join it to other data or build a dashboard on it. ## Write instructions that work Name each field the way you want the column to be called, and add the format when it matters: - *"Invoice number, vendor name, invoice date (MM/DD/YYYY) and total amount (numeric)"* - *"All line items: product name, quantity, unit price and line total"* - *"Only the summary table on page 1"* A vague instruction such as *"get the data"* leaves Mammoth guessing which fields matter. ## If it doesn't look right - **A field is empty or wrong.** Click the pencil icon next to your instruction, make it more specific, and extract again. You don't need to upload the file again. - **It's a scan or a phone photo.** Mammoth reads scans and images too, but text-based PDFs give the most reliable results. Use a clear, straight image. - **You get more than you asked for.** Narrow the instruction to a page or a section, as in the third example above. ## Next month's invoice When you save the dataset you choose how it refreshes. With **Manual**, upload next month's file and the same instruction runs over it. If the new file looks different, Mammoth pauses and asks you before changing your data. Refreshing **When a new file arrives** in a folder depends on your plan. ## Related - [PDF extraction](https://mammoth.io/docs/learn/connectors/pdf-extraction/): every option in the import dialog, supported file types and more example instructions. --- # Guides URL: https://mammoth.io/docs/guides/ · Updated: 2026-11-02 Task-oriented Mammoth guides for building end-to-end workflows, connecting specific tool pairs, and designing advanced pipelines, governance and API automation. Reference documentation explains how each feature works. The guides show how to combine features into complete workflows. They are written for analysts, data engineers, and administrators who know the Mammoth basics and want to build something specific. ## Where to start - **You want to see one task done, start to finish**: watch a [How-to](https://mammoth.io/docs/guides/how-to/). - **You have a business outcome in mind**: start with [Use cases](https://mammoth.io/docs/guides/use-cases/). - **You want to connect two specific tools or set up a connection**: go to [Integrations](https://mammoth.io/docs/guides/integrations/). - **You are building complex pipelines or running Mammoth for several teams**: read [Advanced patterns](https://mammoth.io/docs/guides/advanced/). - **You are moving from another tool**: see the [Migration guides](https://mammoth.io/docs/migration/). ## Sections in this guide collection - [How-to](https://mammoth.io/docs/guides/how-to/): Short walkthroughs with a video, each showing one task from start to finish. - [Use cases](https://mammoth.io/docs/guides/use-cases/): Outcome-focused workflows for sales reporting, financial consolidation, customer segmentation, data quality monitoring, dashboards, and batch processing. - [Integrations](https://mammoth.io/docs/guides/integrations/): Walkthroughs for specific tool pairings, such as Salesforce to Tableau and Salesforce to a data warehouse, and the SharePoint client credentials setup. - [Advanced patterns](https://mammoth.io/docs/guides/advanced/): Guides on enterprise architecture, data validation, incremental processing, multi-source joins, custom transforms, dataset lifecycle, AI-powered workflows, and API workflows. --- # Integrations URL: https://mammoth.io/docs/guides/integrations/ · Updated: 2026-11-02 Guides for Salesforce to Tableau, Salesforce to a data warehouse, and SharePoint client credentials, plus a list of Mammoth connectors by category. These guides are for analysts and administrators who need to connect Mammoth to a specific platform for CRM, visualization, or warehousing. Each guide covers what is unique to that pairing, such as authentication, field mapping, destination configuration, and troubleshooting, and links to the [Learn](https://mammoth.io/docs/learn/) reference docs for the general mechanics. If you want a workflow built around a business outcome instead of a tool pairing, such as sales reporting or operational dashboards, see [Use cases](https://mammoth.io/docs/guides/use-cases/). ![Salesforce feeds a Mammoth transformation that branches into the Tableau and data warehouse integration guides.](https://mammoth.io/docs/images/20260805_053612_architecture-integrations-overview1.webp) ## Integration guides | Guide | Direction | What it covers | | --- | --- | --- | | [Salesforce + Tableau](https://mammoth.io/docs/guides/integrations/salesforce-tableau/) | Salesforce → Mammoth → Tableau | Sales pipeline analytics with Tableau visualization | | [Salesforce + Data Warehouse](https://mammoth.io/docs/guides/integrations/salesforce-snowflake/) | Salesforce → Mammoth → BigQuery, PostgreSQL, SQL Server, or Redshift | CRM data in the warehouse, clean and transformed | | [SharePoint client credentials](https://mammoth.io/docs/guides/integrations/sharepoint-client-credentials/) | SharePoint → Mammoth | Register a Microsoft Entra ID app so Mammoth can download files from SharePoint | ## Available connectors Mammoth's **Connectors** catalog (reached via **New Dataset → Connector**) includes pre-built connectors across databases, cloud storage, CRM, analytics, e-commerce, and accounting. See the full [Connectors overview](https://mammoth.io/docs/learn/connectors/) for a complete comparison table. **Databases** [PostgreSQL](https://mammoth.io/docs/learn/connectors/postgresql-connector/) · [MySQL](https://mammoth.io/docs/learn/connectors/mysql/) · [SQL Server](https://mammoth.io/docs/learn/connectors/mssql/) · [MongoDB](https://mammoth.io/docs/learn/connectors/mongodb/) · [Snowflake](https://mammoth.io/docs/learn/connectors/snowflake-connector/) · [BigQuery](https://mammoth.io/docs/learn/connectors/bigquery/) · [Hadoop (Hive)](https://mammoth.io/docs/learn/connectors/hadoop-connector/) · [Parquet (Azure)](https://mammoth.io/docs/learn/connectors/parquet-connector/) · [REST API](https://mammoth.io/docs/learn/connectors/rest-api/) **Cloud storage** [Google Drive](https://mammoth.io/docs/learn/connectors/google-drive/) · [Google Sheets](https://mammoth.io/docs/learn/connectors/google-sheets-connector/) · [Google Cloud Storage](https://mammoth.io/docs/learn/connectors/google-cloud-storage-connector/) · [Dropbox](https://mammoth.io/docs/learn/connectors/dropbox-connector/) · [SFTP](https://mammoth.io/docs/learn/connectors/sftp/) · [SharePoint](https://mammoth.io/docs/learn/connectors/sharepoint-connector/) **CRM and marketing** [Salesforce](https://mammoth.io/docs/learn/connectors/salesforce-connector/) · [HubSpot](https://mammoth.io/docs/learn/connectors/hubspot-connector/) · [Mailchimp](https://mammoth.io/docs/learn/connectors/mailchimp-connector/) · [SendGrid](https://mammoth.io/docs/learn/connectors/sendgrid-connector/) **Analytics and advertising** [Facebook Ads Manager](https://mammoth.io/docs/learn/connectors/facebook-ads-manager/) · Google Analytics Universal **E-commerce** [Shopify](https://mammoth.io/docs/learn/connectors/shopify-connector/) **Accounting** [Xero](https://mammoth.io/docs/learn/connectors/xero-connector/) > Tip: Sources and destinations\ > Mammoth integrations work in two directions: **sources** (data coming in) and **destinations** (data going out). Most integrations involve both—clean data in Mammoth, results pushed to a BI tool or warehouse. See [Export and share](https://mammoth.io/docs/learn/export-share/) for the full list of supported output targets. --- # Salesforce + your data warehouse URL: https://mammoth.io/docs/guides/integrations/salesforce-snowflake/ · Updated: 2026-11-02 Send cleaned Salesforce data to BigQuery, PostgreSQL, SQL Server or Redshift with Mammoth, on a daily refresh. Snowflake is a source only, not a destination. This guide is for data engineers and BI developers who want a clean, queryable version of their CRM data in a data warehouse, without the messy field names, polymorphic IDs, and inconsistent stage values that come out of Salesforce directly. Mammoth sits between Salesforce and the warehouse to handle the transformation, so you control what lands there. > **If your warehouse is Snowflake:** Mammoth supports Snowflake as a data **source** today, not as an export destination—a pipeline's output cannot be written directly into Snowflake yet. This guide uses **BigQuery** as the worked example, since it is the destination with the most complete write-mode support (Replace, Combine, or Merge). The same [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/) pattern also works with PostgreSQL, SQL Server, or Amazon Redshift if one of those is your stack. If Snowflake is a hard requirement, land the cleaned data in one of those destinations (or as a file via SFTP) and load it into Snowflake with your own pipeline outside Mammoth. ![Salesforce data runs through a Mammoth pipeline; Send to Destinations writes to BigQuery, PostgreSQL, SQL Server or Redshift.](https://mammoth.io/docs/images/20260805_053457_architecture-salesforce-warehouse1.webp) ## What you will build - A Salesforce dataset pulling Opportunities, Accounts, and Users - A transformation pipeline: field selection, normalization, derived metrics - A [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/) task writing to BigQuery (or PostgreSQL, SQL Server, or Redshift) - A [Dataset Refresh automation](https://mammoth.io/docs/learn/automations/dataset-refresh/) keeping the warehouse table fresh daily ## Step 1: Connect Salesforce Follow the [Salesforce connector guide](https://mammoth.io/docs/learn/connectors/salesforce-connector/) to authenticate and create your dataset, selecting `Opportunity`, `Account`, and `User` (for owner names). **Field selection:** Salesforce Opportunity objects have 100+ fields. For the warehouse, keep only what downstream analytics will use. This reduces transfer time and keeps the destination table clean: - `Id`, `Name`, `StageName`, `Amount`, `CloseDate`, `Probability` - `OwnerId`, `AccountId`, `CreatedDate`, `LastModifiedDate` - `LeadSource`, `Type`, `ForecastCategoryName` - Any custom fields your team uses for qualification or segmentation Use [Remove Column](https://mammoth.io/docs/learn/transform/column-management/) to drop everything else before transformation begins. ## Step 2: Transform ### Normalize stage names [Bulk Replace](https://mammoth.io/docs/learn/transform/filter-label-replace/) on `StageName` to map all variants to canonical stages. This is the most impactful transformation, because downstream SQL becomes `WHERE StageName = 'Closed Won'` instead of a multi-value `IN` clause. ### Flatten owner information Bring in readable owner details from the User object with [Join](https://mammoth.io/docs/learn/transform/unify/#join) on `OwnerId` ↔ `User.Id`: - Bring in `User.Name` as `OwnerName` - Bring in `User.Region` (or a custom territory field) as `OwnerRegion` ### Add derived metrics Using [Math Function](https://mammoth.io/docs/learn/transform/date-numeric-text/): - `DaysToClose = CloseDate - CreatedDate`: for historical pipeline velocity analysis - `AgeInStage = TODAY() - LastModifiedDate`: for stale deal identification ## Step 3: Configure the warehouse destination 1. In your pipeline, open **Export** → **Databases** (for a Mammoth-managed BigQuery or PostgreSQL table) or [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/) → external **Google BigQuery** (for your own project), or PostgreSQL, SQL Server, or Redshift if that is your warehouse. 2. Enter the target table name—for example, `sf_opportunities_clean`. 3. For external BigQuery, choose the **Update Method**: | Write mode | Behavior | Use when | | --- | --- | --- | | **Replace** | Deletes all existing rows and inserts fresh data every run | Full refresh: simplest and always consistent, but slower for very large tables | | **Combine** | Appends new rows without touching existing ones | Building history over time | | **Merge** | Updates rows matching a reference column, inserts rows with no match | Keeping a current-state table in sync | For Salesforce Opportunities: **Merge on** `Id` is usually the right choice—it keeps the table current without duplicating records that have not changed. Merge requires you to select `Id` as the **Reference column** in the destination form. Other external destinations (PostgreSQL, SQL Server, Redshift) use the same Send to destinations flow with their own connection fields—see the full [destination reference](https://mammoth.io/docs/learn/export-share/send-to-destinations/) for each one's exact form. ## Step 4: Schedule the refresh Add a [Dataset Refresh automation](https://mammoth.io/docs/learn/automations/dataset-refresh/) on the Salesforce dataset. Daily, before business hours, is a common cadence for warehouse syncs. Check the Automation list for run status, since a failed run means downstream queries and dashboards are working off stale data. **Incremental considerations:** For large Salesforce orgs (100k+ opportunities), a full daily pull may be slow. Add a [Conditional Filter](https://mammoth.io/docs/learn/transform/filter-label-replace/) on `LastModifiedDate` to keep only records changed in roughly the last 48 hours. Combined with Merge write mode at the destination, this keeps the warehouse table current without re-processing unchanged records every run. ## Downstream usage in BigQuery Once the data lands in BigQuery, your team can query it directly: ```sql -- Pipeline velocity by quarter SELECT DATE_TRUNC(CloseDate, QUARTER) AS quarter, OwnerRegion, COUNT(*) AS deals, SUM(Amount) AS total_acv, AVG(DaysToClose) AS avg_days_to_close FROM `project.dataset.sf_opportunities_clean` WHERE StageName = 'Closed Won' GROUP BY 1, 2 ORDER BY 1 DESC; ``` ## Common issues | Issue | Cause | Fix | | --- | --- | --- | | Destination write fails (permission error) | Mammoth's warehouse user lacks write/create permissions on the target table | Grant INSERT/CREATE TABLE (or your warehouse's equivalent) to the Mammoth-connected role | | Merge fails | Reference column does not exist in both the View and the destination table, or types don't match | Confirm `Id` exists in both with compatible types | | Salesforce fields missing at the destination | Field-level security on the Salesforce integration user | Grant field visibility in the Salesforce profile | | Destination not updating after pipeline runs | Auto-sync is off on the View or the destination | Check Auto-sync on both; see [Send to destinations troubleshooting](https://mammoth.io/docs/learn/export-share/send-to-destinations/#troubleshooting) | --- # Salesforce + Tableau URL: https://mammoth.io/docs/guides/integrations/salesforce-tableau/ · Updated: 2026-11-02 Clean Salesforce opportunity data in Mammoth and hand it to Tableau by CSV, Live Link, a Mammoth-managed database, or your own warehouse. Tableau can connect directly to Salesforce, but Salesforce data is messy—opportunity stage names differ across teams, fields are inconsistently populated, and the object model is complex. Mammoth sits in the middle to clean, reshape, and enrich the data before Tableau sees it. This guide is for data analysts and BI developers. It covers what is specific to the Salesforce → Tableau pairing: the cleanup recipe and the three ways to hand cleaned data to Tableau. For the general mechanics (connecting Salesforce, building transformations, setting up a refresh schedule), it links to the reference docs. If you are building a full sales-reporting workflow, see the [Sales analytics use case](https://mammoth.io/docs/guides/use-cases/sales-analytics/) instead. ![Salesforce data flows through a Mammoth pipeline into a View that reaches Tableau by CSV or through a warehouse.](https://mammoth.io/docs/images/20260805_053531_architecture-salesforce-tableau1.webp) ## What you will build - A Salesforce dataset (Opportunities, Accounts, and Users for owner names) connected via the [Salesforce connector](https://mammoth.io/docs/learn/connectors/salesforce-connector/) - A transformation pipeline: stage normalization, owner enrichment, deal scoring - A View that Tableau reads from—by CSV or Live Link, a Mammoth-managed database, or your own warehouse - A [Dataset Refresh automation](https://mammoth.io/docs/learn/automations/dataset-refresh/) to keep it current ## Step 1: Connect Salesforce Follow the full [Salesforce connector guide](https://mammoth.io/docs/learn/connectors/salesforce-connector/) to authenticate and create your dataset. Two things specific to this integration: - **Objects to pull:** `Opportunity` and `Account` for the pipeline data, plus `User` so you can resolve `OwnerId` to a readable name later. Mammoth's object list reflects everything your connected Salesforce profile can see—it is not limited to a fixed set. - **API access:** requires the "API Enabled" permission on the connected profile—included in Enterprise, Unlimited, and Developer editions; Professional edition needs the API add-on. Field-level security (FLS) also applies: a field the integration user cannot see in Salesforce does not appear in Mammoth. Use a dedicated integration user rather than a personal login. ## Step 2: Build the transformation pipeline This is the part that is specific to CRM-for-BI cleanup. ### Stage normalization Salesforce stage names often drift across teams—"Proposal Sent", "Proposal/Price Quote", and "Proposal" all mean the same thing. 1. Add a [Bulk Replace](https://mammoth.io/docs/learn/transform/filter-label-replace/) task on the `StageName` column and group the variants into your canonical stages: `Prospecting`, `Discovery`, `Proposal`, `Negotiation`, `Closed Won`, `Closed Lost`. 2. Add a `StageNumber` column with [Label & Insert Values](https://mammoth.io/docs/learn/transform/filter-label-replace/) so each canonical stage maps to an integer (1–6) for sorting and funnel math. ### Owner enrichment Opportunity owner is stored as `OwnerId` (a Salesforce ID), not a name. Bring in the readable details from the `User` object with [Join](https://mammoth.io/docs/learn/transform/unify/#join). Use Join rather than Lookup here because you are pulling in more than one column at once: - Key columns: `Opportunity.OwnerId` ↔ `User.Id` - Columns to bring in: `User.Name`, `User.Title`, `User.Region` (if you track one), `User.Manager` ### Deal scoring (optional AI enrichment) Use [Generative AI](https://mammoth.io/docs/learn/transform/generative-ai/) with a plain-English prompt against `Amount`, `StageNumber`, and days-since-last-activity, for example: *"Classify this opportunity as Hot, Warm, Cold, or At Risk based on amount, stage, and recent activity."* This gives Tableau a color-codeable column without a calculated field. Note the feature's limits: 300 characters per generated value, and only the first 50,000 rows of the view are processed per run. ### Pipeline metrics Using [Math Function](https://mammoth.io/docs/learn/transform/date-numeric-text/): - `DaysToClose = CloseDate - TODAY()` (for open opportunities) - `WeightedValue = Amount * (Probability / 100)` (if Probability is populated) ## Step 3: Create the View Create a View from the finished pipeline (name it something like `sf_pipeline_clean`). This is the stable, cleaned dataset Tableau reads from. How you expose it to Tableau depends on which option you pick in Step 5. ## Step 4: Keep it current Add a [Dataset Refresh automation](https://mammoth.io/docs/learn/automations/dataset-refresh/) on the Salesforce dataset. Every 4 hours is a reasonable default for sales teams: frequent enough to feel current without pulling more from the Salesforce API than necessary. Check the Automation list for run status (Active / Failed) rather than assuming success. If you are on a large org and see rate-limit errors from Salesforce, reduce the cadence or narrow the query to recently modified records—Salesforce's own API limits vary by edition and license count, so there's no single number to plan around. ## Step 5: Connect Tableau **Option A: Tableau Desktop (simplest).** [Download](https://mammoth.io/docs/learn/export-share/export-formats/) the View as CSV, then in Tableau Desktop: **Connect** → **Text File**. For something that stays current without re-downloading by hand, use a [Live Link](https://mammoth.io/docs/learn/export-share/live-links/) instead—it's a stable URL that always serves the View's latest data. **Option B: Mammoth-managed database (no infrastructure to run).** Export the View to a Mammoth-managed **BigQuery** or **PostgreSQL** destination (**Export** → **Databases**). Mammoth provisions it and gives you connection credentials. Point Tableau (Desktop or Server) at that database and let it refresh on its own schedule. **Option C: Your own warehouse.** Use [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/) to an external **BigQuery**, **PostgreSQL**, **SQL Server**, or **Redshift** destination—whichever matches your existing stack—then connect Tableau Server/Cloud directly to that table. This option suits larger deployments: the warehouse handles the serving layer, and BigQuery destinations support Replace, Combine, or Merge write modes depending on whether you want a full refresh or an incrementally updated table. ## Common issues and fixes | Issue | Cause | Fix | | --- | --- | --- | | Missing fields in Mammoth | Field-level security on the Salesforce integration user | Grant field access in the Salesforce profile | | Salesforce rate-limit errors | Too-frequent refresh, or a large org | Reduce refresh cadence, or filter the Salesforce query to recently modified records | | Stage names not normalizing | A new stage was added in Salesforce after the Bulk Replace mapping was built | Update the Bulk Replace grouping to include the new value | | Warehouse destination not updating | Auto-sync is off, or the pipeline did not re-run | Check Auto-sync on both the View and the destination; see [Send to destinations troubleshooting](https://mammoth.io/docs/learn/export-share/send-to-destinations/#troubleshooting) | --- # Set up SharePoint client credentials URL: https://mammoth.io/docs/guides/integrations/sharepoint-client-credentials/ · Updated: 2026-11-02 Register an app in Microsoft Entra ID and get the client credentials Mammoth needs to download files from SharePoint. This guide is for Microsoft 365 administrators. It walks you through registering an app in Microsoft Entra ID (formerly Azure AD) from the Microsoft 365 admin center at `https://admin.microsoft.com`, and obtaining the client credentials Mammoth needs to download files from SharePoint using the Microsoft Graph API. ## What the app does and the permissions it needs - The app will get secure access tokens via [**MSAL**](https://learn.microsoft.com/en-us/entra/identity-platform/msal-overview) to list and download files from SharePoint document libraries. - **Recommended permissions** (Application type): - `Sites.Read.All` - These are **Application permissions** (not Delegated), so they require **admin consent**. ## Prerequisites - You must sign in with a **Global Administrator** or **Application Administrator** account in your Microsoft 365 tenant. --- ## Step 1: Sign in to the Microsoft 365 admin center 1. Go to [**https://admin.microsoft.com**](https://admin.microsoft.com/) and sign in with your admin account. 2. In the left navigation pane, click **All admin centers** (near the bottom). 3. Select **Microsoft Entra**. 4. Click **Go to Microsoft Entra ID** (or **Go to Entra admin center**). You are now in the **Microsoft Entra admin center** (https://entra.microsoft.com). --- ## Step 2: Register a new application 1. In the left menu, expand **Entra ID** → click **App registrations**. 2. Click **+ New registration** at the top. 3. Fill in the form: - **Name**: Enter something clear, e.g., `SharePoint-File-Downloader`. - **Supported account types**: Select the appropriate account type. - **Redirect URI**: Leave blank (not needed for app-only/daemon apps). 4. Click **Register**. --- ## Step 3: Note your app credentials (client ID and tenant ID) After registration, you land on the app **Overview** page. - Copy and save securely: - **Application (client) ID** → This is your `client_id`. - **Directory (tenant) ID** → This is your `tenant_id`. > Tip: Store the IDs securely\ Paste these into a secure note or a password manager. You need them when you connect SharePoint in Mammoth. --- ## Step 4: Add Microsoft Graph API permissions (`Sites.Read.All`) 1. In the left menu (under **Manage**), click **API permissions**. 2. Click **+ Add a permission**. 3. Select **Microsoft Graph**. 4. Choose **Application permissions** (important for app-only access). 5. In the search box, type: - `Sites.Read.All` → select it. 6. Click **Add permissions**. You should now see the permissions listed under **Configured permissions**. --- ## Step 5: Grant admin consent 1. Still on the **API permissions** page, click **Grant admin consent for [Your Tenant Name]**. 2. Review the permissions in the pop-up. 3. Click **Accept** / **Yes**. **Status** should now show “Granted for [Your Tenant]” for each permission. --- ## Step 6: Create a client secret 1. In the left menu (under **Manage**), click **Certificates & secrets**. 2. Under **Client secrets**, click **+ New client secret**. 3. Enter a **Description** (e.g., “SharePoint downloader secret”). 4. Choose an **expiration** period (for example, 6 or 12 months; shorter is more secure). 5. Click **Add**. > Warning: The secret value appears only once\ The **Value** of the secret appears **only once**. Copy it immediately and store it securely with your client_id and tenant_id. This is your `client_secret`. --- ## Step 7: Verify the registration (optional) - Go back to **Overview** → confirm Client ID and Tenant ID. - Go to **API permissions** → confirm consent is granted. - Go to **Certificates & secrets** → confirm the secret is listed (Value is hidden). --- ## Step 8: Get the SharePoint site URL The most straightforward method is to navigate to the SharePoint site and check the URL in your browser's address bar. - **The Format:** This usually appears as `https://[your-domain].sharepoint.com/sites/[site-name]` or simply `https://[your-domain].sharepoint.com` for the default site. - **Common mistake:** Make sure you are not copying the URL of a specific file or a deep sub-folder. - **Correct:** `.../sites/Marketing` - **Too Deep:** `.../sites/Marketing/Shared%20Documents/Forms/AllItems.aspx` --- With the client ID, tenant ID, client secret, and site URL ready, you can connect your Mammoth workspace to SharePoint using the [SharePoint connector](https://mammoth.io/docs/learn/connectors/sharepoint-connector/). --- # AI dashboard creation URL: https://mammoth.io/docs/guides/use-cases/ai-dashboard-creation/ · Updated: 2026-11-02 Create a Mammoth dashboard by describing it in plain language, refine it with the Dashboard Assistant, keep its data fresh, and publish it to viewers. This guide is for business analysts and managers who want a dashboard without writing SQL. It walks through Mammoth's AI dashboard creation: you describe the dashboard you want, and the Dashboard Assistant generates it from your data. For the full reference, see [Creating dashboards](https://mammoth.io/docs/learn/dashboard/creating-dashboards/). **What you will build:** A shareable dashboard generated through natural language prompts. No code and no manual chart configuration. --- ## The challenge of traditional dashboard requests Traditional dashboard creation workflows are slow: 1. You describe what you want to see to a data analyst 2. They write SQL, pull the data, and design charts 3. You review the layout and request changes 4. They iterate, often taking days or weeks 5. The dashboard becomes stale, and the analyst is bottlenecked on updates AI dashboard creation shortens steps 2 to 4: you describe the dashboard, and Mammoth generates a first version you can refine by conversation. --- ## Requirements - A dataset in Mammoth with at least one View (a View from a transformation pipeline works best) - Natural language descriptions of what you want to see - A Mammoth workspace with at least one project --- ## Step 1: Prepare your dataset Before creating the dashboard, make sure your data is clean and properly labeled. The AI reads your View's column names, data types, and sample values. 1. Open or create a dataset in Mammoth 2. Check the column **Explore Cards** to see data types and value distributions 3. Rename columns to be descriptive (e.g., `created_at` → `OrderDate`, `usd_amount` → `Revenue`) using **Rename Column** in the column menu 4. Make sure the View you want to use has the transformations applied **Good dataset characteristics:** - Clear, human-readable column names - Correct data types (dates as dates, numbers as numbers, categories as text) - No excessive null values in critical columns --- ## Step 2: Start a new dashboard 1. Click **Dashboards** in the left sidebar 2. Click **Create Dashboard** 3. In the dialog, browse to your project, select the dataset, and choose the View to use as the data source 4. Click **Select** A full-page prompt screen opens. --- ## Step 3: Describe your dashboard with natural language The prompt is where you tell Mammoth what you want to see. The more specific you are, the better the result. **Example prompts:** *For sales analytics:* > "Show pipeline by stage using a funnel chart. Add a table showing top 10 sales reps by closed-won amount this quarter. Include a line chart showing deal velocity by week." *For financial reporting:* > "Create a P&L dashboard with a table showing revenue, COGS, and operating expenses by month. Highlight months where expenses exceeded budget in red. Add a stacked bar chart showing revenue by product line." *For operational KPIs:* > "Show 4 KPI cards at the top: total units produced today, defect rate (%), on-time delivery %, and open work orders. Below, add a line chart showing production throughput by hour and a table of the top 10 open issues." **Prompt best practices:** **Recommended approach:** - Name the chart types you want (bar, line, pie, scatter, table, KPI card) - Specify metrics clearly (e.g., "sum of revenue", "count of orders", "average days to close") - Describe filters or groupings ("by stage", "by month", "by region") - Use your actual column names from the dataset **Approaches to avoid:** - Vague descriptions ("show the data" is too generic) - Omitting column names ("show sales" ← clarify: Amount, Revenue, or Price?) - Requesting charts the data can't support (Mammoth generates from your data and cannot create data that does not exist) - Describing complex multi-step calculations (do those in the View's pipeline first, and keep the prompt to aggregations and basic math) --- ## Step 4: Generate and review 1. Type your description in the prompt box and click the **send button** 2. Mammoth generates the dashboard and opens the editor, with the Dashboard Assistant chat on the left, the Filters panel in the middle, and a live preview on the right 3. Review the result: - Are the charts the types you requested? - Do the metrics look correct? - Is the layout readable? If something is off, tell the Dashboard Assistant in the chat. Common refinements: - "Move the table below the chart" - "Use a bar chart instead of a line chart" - "Add a date range filter" - "Show the top 5 instead of top 10" --- ## Step 5: Refine and add interactivity Keep chatting with the Dashboard Assistant to adjust any aspect of the dashboard: charts, layout, pages, filters, and theme. **Filters:** the AI creates filters for relevant categorical, date, and numeric columns, and they appear in the Filters panel. Ask the assistant to add, remove, or change filters (for example, "Add a filter for region"). See [Dashboard filters](https://mammoth.io/docs/learn/dashboard/dashboard-filters/). **Themes:** ask for a theme by name or pick one from the **Theme** menu. See [Dashboard themes](https://mammoth.io/docs/learn/dashboard/dashboard-themes/). **Pages:** for larger dashboards, ask the assistant to split the content into pages with tab navigation. See [Dashboard navigation](https://mammoth.io/docs/learn/dashboard/dashboard-navigations/). --- ## Step 6: Keep the data fresh and share **Keep the data current:** 1. Schedule a **Dataset Refresh** automation (Automations → New Automation → Dataset Refresh) if the source is a connector 2. In the dashboard's sync settings, turn on **Sync automatically** so new rows come into your draft when the pipeline runs, and **Publish new data automatically** so they reach viewers **Share the dashboard:** 1. Click **Publish & Share** (top right) and click **Publish** 2. Set **Access Type**: - **Authenticated**: viewers must sign in to Mammoth - **Public**: anyone with the link can view (no sign-in required) 3. Copy the share link and send it by Slack, email, or any other channel --- ## Results to expect - You get a first version of the dashboard from a description, then refine it by conversation instead of reconfiguring charts by hand - Business users can create and adjust dashboards without writing SQL - AI-generated dashboards are a starting point: check the metrics against your data before sharing **Example scenario:** > A marketing director needs a dashboard showing campaign performance by channel. They describe what they want ("Show impressions, clicks, CTR, and conversion rate by channel as a table. Add a line chart of daily impressions over the last 30 days."), review the generated dashboard, and publish it. If they want to tweak the layout the next day, they ask the Dashboard Assistant to change it. --- ## Common patterns and prompts **E-commerce dashboard:** > "Show total revenue, order count, and average order value as KPI cards. Add a line chart of daily revenue for the last 90 days. Show top 10 products by revenue as a table. Add filters for date range and product category." **HR and people analytics:** > "Create 4 KPI cards: total headcount, open requisitions, average tenure, and voluntary turnover %. Add a bar chart showing headcount by department. Add a line chart showing new hires per month for the last 12 months." **Customer support metrics:** > "Show average response time, resolution time, customer satisfaction score, and ticket volume as KPI cards. Add a line chart of tickets created versus resolved by day. Show top 10 ticket types as a bar chart." These prompts assume your View already has the columns they refer to (for example, a status or resolution time column). Prompts can only chart what the data contains. --- ## Limitations **AI dashboard creation works best for:** - Aggregated metrics (sums, counts, averages) - Standard chart types (bar, line, pie, scatter, table, KPI card) - Straightforward filters (date range, category select) **Do these in the View's pipeline first, then build the dashboard on top of it:** - Complex calculations (multi-step math across joined datasets) - Derived columns that need conditional logic --- ## Variations: dashboard suites and email delivery **Build a dashboard suite:** Create multiple complementary dashboards (for example, Sales, Finance, Operations), each on its own View. **Email the data:** Use a **Messaging** automation to email the underlying View as a CSV attachment on a schedule. --- ## Next steps after your first dashboard 1. **Start with your simplest use case**: pick one dashboard your team needs and describe it in natural language 2. **Share the dashboard**: show it to stakeholders and iterate based on feedback 3. **Add more dashboards**: once comfortable, create dashboards for other teams --- # Batch processing workflows URL: https://mammoth.io/docs/guides/use-cases/batch-processing-workflows/ · Updated: 2026-11-02 Process recurring batch files in Mammoth: set up an intake folder, normalize formats, consolidate files, add quality gates, and deliver clean data downstream. Every organization receives data in batches: vendor feeds on Monday morning, system exports at end-of-day, partner files on the 1st of the month. The challenge is processing them reliably, with quality checks, without an engineering team to monitor the pipeline. This guide is for operations managers, data engineers, and analysts. It covers the end-to-end pattern for batch processing in Mammoth: ingesting files, applying transformations, validating quality, and routing outputs to downstream systems. **What you will build:** A batch processing pipeline that ingests incoming files automatically, transforms and validates them, and delivers clean data to your downstream systems. ![Batch flow: files land in the Data Library, Data Consolidation combines them, a pipeline cleans them, then a check.](https://mammoth.io/docs/images/20260805_054145_batch-processing-architecture1.webp) ## When to use batch processing Batch processing is the right pattern when: - Data arrives as files (CSV, Excel, and other [supported formats](https://mammoth.io/docs/learn/data-sources/supported-formats/)) rather than through live connections - Files arrive on a schedule (daily, weekly, monthly) rather than continuously - Files keep arriving in volume - You need reliable error handling and quality gates - Processing time is less critical than accuracy For near-real-time requirements, see [Operational dashboards](https://mammoth.io/docs/guides/use-cases/operational-dashboards/). --- ## Example scenario: retail partner sales files **Example:** A CPG manufacturer receives daily sales data from many retail partners. Each partner sends their file in a slightly different format. The manufacturer needs to consolidate all files into a single dataset, validate them, and have clean data available in the warehouse by 7 AM for the sales team's morning reports. File arrival window: 10 PM–2 AM\ Processing window: 2 AM–4 AM\ Data available by: 7 AM (comfortable buffer) --- ## Step 1: Set up the intake folder 1. In your Mammoth project's Data Library, create a folder: `Incoming/RetailPartnerFiles` 2. Have your team upload each partner's file to this folder (or pull files in from SFTP or cloud storage with a [connector](https://mammoth.io/docs/learn/connectors/)) 3. Any file uploaded to this folder is picked up by the Data Consolidation automation you create in Step 3 --- ## Step 2: Build a normalization pipeline Data Consolidation requires every file in the folder to match the destination dataset's schema, so normalize each partner's format first: 1. Load one representative file per partner format as its own dataset 2. Build a transform pipeline that produces the standard output schema: - `PartnerID` (**Add column**, then **Label & Insert Values** with the partner's ID) - `ProductCode_canonical` (**Bulk Replace** to standardize SKU formats) - `StoreID_canonical` (**Lookup** against the store master) - `SalesDate` (**Convert column type** to date) - `Units` (convert to number, handle nulls) - `Revenue` (convert to number, handle nulls) ![Six tasks turn 23,450 messy rows into clean output: AI Prompt, Bulk Replace, Lookup, two Convert Types, Fill Missing.](https://mammoth.io/docs/images/20260805_054206_batch-processing-transform1.webp) 3. Use **Send to dataset** at the end of each partner's pipeline to write the standard-schema output to your consolidated master dataset (Update Method **Combine data**) If all your partners already send the same layout, skip this step and consolidate the raw files directly in Step 3. --- ## Step 3: Set up a Data Consolidation automation 1. Open **Automations** in the project sidebar → **New Automation** → **Data Consolidation** 2. Select the source folder: `Incoming/RetailPartnerFiles` 3. Optionally turn on **Only process files matching a name pattern** and enter text that the file names contain (matching is not case sensitive) 4. Select the destination dataset: your consolidated retail sales master, with its update method set to **Combine with older data** 5. Name the automation and create it The consolidation fires whenever a new file is uploaded to the folder; there is no schedule to set. Check the automation's status in the Automations list and in **Monitor**, since a file whose columns do not match the destination dataset makes the consolidation fail. --- ## Step 4: Build the quality gate After consolidation, run quality checks before the data reaches downstream systems. 1. Add a **Data Check** task to the consolidated dataset's pipeline (see [Data quality monitoring](https://mammoth.io/docs/guides/use-cases/data-quality/) for the full pattern) 2. Minimum checks for batch processing: - **Row count** compared with the prior run (for example, **changed by more than** 10%) - **Null percentage** on key fields (ProductCode, StoreID, SalesDate) - **Value range** on SalesDate (all records should be within the expected window) - **Unique values** or a **Custom prompt** check for duplicates (same file submitted twice by the same partner) 3. Set the fail action to **Pause the pipeline** so downstream delivery waits until the data is fixed or approved, and turn on **Notify on failure** 4. If all checks pass, the pipeline continues to delivery --- ## Step 5: Send to downstream systems Once quality checks pass, deliver clean data: **To a warehouse (for BI tools):** 1. Open your consolidated View → **Export** → **Databases** → BigQuery, PostgreSQL, SQL Server, or Redshift 2. Table: `retail_sales_consolidated` 3. For BigQuery, choose the **Update Method**: **Replace** (full refresh), **Combine** (append), or **Merge** 4. The export is a task at the end of the pipeline, so it runs each time the pipeline runs **To a Mammoth dashboard (for ops team):** 1. The consolidated View powers the dashboard automatically, with no additional task needed 2. The dashboard reflects the latest consolidated data as soon as the pipeline completes **Via Live Link (for downstream API consumers):** 1. Open your consolidated View → **Export** → **Live link** 2. Copy the URL, which updates on every pipeline run. Share with downstream systems that pull via API or auto-refresh. --- ## Step 6: Handle errors and exceptions Batch pipelines need explicit error handling: **File-level errors:** - If a partner file has schema changes (new column, missing column), the consolidation fails rather than loading mismatched data - Watch the automation's status in **Monitor** and the Automations list, and fix or re-normalize the file before re-uploading **Record-level exceptions:** 1. Create an Exceptions View with a **Conditional Filter** that keeps records failing your rules 2. Send exceptions to a separate dataset (**Send to dataset**) for manual review 3. Do not silently drop bad records; surface them **Recovery pattern:** - Because consolidation in **Combine** mode appends rows, re-uploading a file that already loaded adds its rows again. Use `PartnerID + SalesDate + StoreID` as your deduplication key (**Remove duplicate rows**) to guard against that --- ## Performance tips for high-volume runs For high-volume datasets (10M+ rows per run): | Optimization | How to implement | Impact | | --- | --- | --- | | Filter early | Apply date and entity filters as first transform tasks | Reduces rows processed downstream | | Remove unneeded columns | Use **Remove column** early in the pipeline | Reduces data carried through every later task | | Avoid row-level AI on full dataset | Use **Bulk Replace** or standard tasks instead of Generative AI where possible | Reduces API cost and time | --- ## Results to expect - Incoming files are consolidated automatically as they are uploaded - Quality checks run on every pipeline run and can pause delivery of bad data - Clean data reaches your warehouse or dashboard without manual file handling --- # Customer cohort analysis URL: https://mammoth.io/docs/guides/use-cases/customer-cohorts/ · Updated: 2026-11-02 Analyze customer behavior over time with RFM segmentation and lifetime value metrics built in Mammoth. Aggregate customer data hides the most important story: which customers are growing, which are at risk, and which segment drives most of your revenue. This guide is for marketing, product, and customer success analysts. It shows how to build an RFM (Recency, Frequency, Monetary) segmentation and customer lifetime value model in Mammoth. **What you will build:** An automated customer segmentation pipeline that scores every customer on three dimensions, assigns them to named segments (Champions, At Risk, Hibernating, etc.), and produces a dashboard your marketing and success teams can act on. ![Mock cohort dashboard: RFM score scatter, segment distribution, lifetime value by segment, Top 20 Champions table.](https://mammoth.io/docs/images/20260805_054250_customer-cohorts-segmentation1.webp) --- ## Requirements - Transaction or order history dataset (at minimum: CustomerID, OrderDate, OrderAmount) - Optional: Customer attributes table (region, industry, acquisition channel) - A Mammoth workspace and project --- ## The RFM framework | Dimension | Definition | Why it matters | | --- | --- | --- | | **Recency (R)** | Days since last purchase | Recent buyers are more likely to buy again | | **Frequency (F)** | Number of purchases in window | High frequency = strong relationship | | **Monetary (M)** | Total spend in window | Guides where to focus retention effort | Each dimension gets a score from 1–5. Combined, they create 125 possible RFM combinations, which Step 3 condenses into a handful of actionable segments. --- ## Step 1: Calculate RFM metrics per customer ### Recency 1. Open your transaction dataset in the Data Editor 2. Add a **Group & Pivot** task: group rows by `CustomerID`, with `Max` of `OrderDate` as `LastPurchaseDate` 3. Add a **Calculate date difference** task: Start Date `LastPurchaseDate`, End Date **Current Time (UTC)**, unit **Days**, new column `RecencyDays` ### Frequency 1. In the same Group & Pivot task, add **+ Count** to get `TotalOrders` ### Monetary 1. Add `Sum` of `OrderAmount` as `TotalSpend` in the same task You now have one row per customer with `RecencyDays`, `TotalOrders`, and `TotalSpend`. --- ## Step 2: Score each dimension 1–5 Use the **Window function** task with **N tile** (5 buckets) to assign quintile scores based on your actual data distribution: 1. Add a **Window function** task, choose **N tile**, select the `RecencyDays` column, and add a sort on `RecencyDays` ascending 2. Place the result in a new column named `R_Score`. Score 1 is the most recent customers (lowest `RecencyDays`) and score 5 the least recent 3. Repeat for `TotalOrders` → `F_Score`, sorting ascending so that 5 = most orders 4. Repeat for `TotalSpend` → `M_Score`, sorting ascending so that 5 = highest spend > Tip: N tile adapts to your data\ > N tile splits the customers into five equal-sized groups using their actual values, so the thresholds adapt to your data distribution regardless of dataset size or skew. --- ## Step 3: Assign named segments Combine the three scores into a single `RFM_Code` and use **AI SQL Query** to assign segment names: 1. Add a **Combine columns & text** task: combine `R_Score`, `F_Score`, `M_Score` with no separator → output column `RFM_Code` (e.g., "555", "123", "421") 2. Add an **AI SQL Query** task 3. Describe the segmentation rule: > "Add a column CustomerSegment that assigns each row a segment name based on RFM_Code using these rules: > > - Champions: R=5, F=4–5, M=4–5 > - Loyal Customers: F=4–5, M=3–5, R=3–5 > - At Risk: R=1–2, F=3–5, M=3–5 > - Can't Lose Them: R=1–2, F=4–5, M=4–5 > - Potential Loyalists: R=4–5, F=1–2, M=1–3 > - New Customers: R=5, F=1, M=1–2 > - Hibernating: R=1–2, F=1–2, M=1–3 > - Lost: R=1, F=1, M=1 > - Everyone Else: all other combinations" 4. Review the generated SQL and apply. Name the output column `CustomerSegment`. --- ## Step 4: Calculate customer lifetime value Add lifetime value metrics to each segment: **Average Order Value (AOV)** ```plaintext AOV = TotalSpend / TotalOrders ``` Add it with the **Math function** task: `"TotalSpend" / "TotalOrders"` **Predicted Annual Value** ```plaintext PredictedAnnualValue = (TotalOrders / tenure_months * 12) * AOV ``` Where `tenure_months` comes from a **Calculate date difference** task (Start Date `FirstPurchaseDate`, End Date **Current Time (UTC)**, unit **Months**). Add `Min` of `OrderDate` as `FirstPurchaseDate` in the Step 1 Group & Pivot task. **Segment averages**\ Add a second **Group & Pivot** task (set **Place the result in** to a new dataset): - Group rows by `CustomerSegment` - Calculate: `Average` of `TotalSpend`, `TotalOrders`, and `RecencyDays`, plus a **Count** --- ## Step 5: Enrich with customer attributes If you have a customer attributes table (region, industry, acquisition channel): 1. Add a **Lookup** task 2. Join on `CustomerID` 3. Pull in `Region`, `Industry`, `AcquisitionChannel` This enables segment breakdown by acquisition source, which you need for marketing ROI analysis. --- ## Step 6: Build the dashboard 1. Click **Create Dashboard** from your customer-level View 2. Prompt: "Show customer segment distribution, LTV by segment, recency trend over time, and top 25 champions by total spend" **Recommended dashboard layout:** | Position | Card | Why | | --- | --- | --- | | Top left | Segment distribution (pie or bar) | Quick health check | | Top right | LTV by segment (bar chart) | Revenue concentration | | Middle left | Champions table (top 25) | Actionable target list | | Middle right | At Risk count and trend | Retention urgency | | Bottom | Recency distribution (histogram) | Churn early warning | --- ## Step 7: Export to CRM or email platform Turn insights into action: 1. Add a **Conditional Filter** to isolate a specific segment (e.g., "At Risk") 2. Download as CSV, or use [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/) (for example, a database, SFTP, or REST API export) to hand the list to your CRM or marketing platform 3. In Salesforce, create a campaign list from the At Risk segment; in HubSpot, trigger a re-engagement workflow --- ## Results to expect - **Segment refresh:** Configure a scheduled refresh, and segments recalculate automatically each time the pipeline runs - **Targeting:** Export a segment as a list, or send it to a destination, for campaigns aimed at a specific group --- ## Variations: retention curves and regional view **Cohort retention curves**\ Group customers by first-purchase month (acquisition cohort) and plot retention (the percentage still active) by month number. This shows whether your product has a retention problem and at which point customers typically churn. **Geographic segmentation overlay**\ After joining customer attributes, add a choropleth map card to the dashboard showing Champions density by region. --- # Data quality monitoring URL: https://mammoth.io/docs/guides/use-cases/data-quality/ · Updated: 2026-11-02 Monitor data quality in Mammoth with the data quality report, Data Check tasks, fail actions, failure notifications and View Insights for anomaly detection. Bad data does not announce itself. It shows up as a P&L with impossible negative margins, a customer count that drops overnight, or a compliance report that passes internal review and fails audit. By then, the damage is done. This guide is for data quality managers, analysts, and operations managers. It shows how to build automated data quality monitoring in Mammoth: checks that run on every data refresh, flag anomalies, and alert your team before bad data reaches downstream systems. **What you will build:** A data quality pipeline with automated checks and failure notifications when quality thresholds are breached. ![Mock data quality report: column completeness, value distributions and a dataset summary with a 78% overall score.](https://mammoth.io/docs/images/20260805_054337_data-quality-report1.webp) --- ## The challenge of manual data quality checks Manual data quality checks are: - **Slow**: by the time someone notices, reports have already gone out - **Incomplete**: teams check what they think might break, not what actually breaks - **Unscalable**: each new data source multiplies the checking burden In Mammoth, you embed quality gates directly in the pipeline so checks run automatically on every run. --- ## Step 1: Use the built-in data quality report Before building custom checks, run Mammoth's automatic quality analysis. 1. Open your dataset 2. Click the **View Data Quality** button in the bottom-right of the dataset view (shows your quality score) 3. Review the report: - **Null rate** per column: flag anything above your tolerance threshold - **Distinct value count**: unexpectedly high or low counts indicate data issues - **Format consistency**: mixed types and suspicious patterns - **Statistical outliers**: values outside expected ranges > Tip: Record a baseline\ Note the initial findings (null rates, distinct counts) as your baseline, and use them to pick thresholds for your Data Check rules in the next steps. --- ## Step 2: Define your quality rules Translate your data knowledge into explicit checks. The **Data Check** pipeline task runs them on every pipeline run. Common rules: | Rule type | Example | Data Check type | | --- | --- | --- | | Null check | `CustomerID` must never be null | **Null percentage** | | Range check | `OrderAmount` must be between $1 and $1,000,000 | **Value range** | | Duplicate check | `OrderID` must be unique | **Unique values** | | Referential integrity | All `ProductID` values must exist in the product catalog | **Lookup** against the catalog, then a **Custom prompt** check that no looked-up value is empty | | Format check | All `Email` values must match email format | **Custom prompt** (describe the rule in plain language) | | Statistical bound | Row count must be within ±20% of prior run | **Row count** with the **changed by more than** condition | --- ## Step 3: Add the Data Check task 1. Open your dataset in the Data Editor and add a **Data Check** task after your transformation tasks (it can be pinned to the end of the pipeline) 2. Click **Add check** and choose a check type. Repeat for each rule from Step 2: - **Null percentage** on `CustomerID` with the condition `eq` 0 - **Value range** on `OrderAmount`, between 1 and 1,000,000 - **Unique values** on `OrderID` - **Row count** with **changed by more than** 20%, compared with the prior run 3. For referential integrity, add a **Lookup** on `ProductID` against your product catalog first, then add a **Custom prompt** check such as "ProductName is never empty" 4. Choose how strict each check is with its tolerance (fail on any violating row, or only when more than 1%, 5%, or 10% of rows violate) --- ## Step 4: Choose what happens on failure Each Data Check task has one fail action: - **Flag and continue**: the pipeline runs normally and the failure is flagged. Use this for warnings. - **Pause the pipeline**: downstream tasks are blocked until you fix the data or approve it. Use this for critical rules. To use both levels, add two Data Check tasks: one with the warning-level rules set to **Flag and continue**, and one with the critical rules set to **Pause the pipeline**. The Data Check card in the pipeline shows **Passed**, **Failed**, **Bypassed**, or **Not run**. Open it to see each check's result and run details. --- ## Step 5: Set up automated alerts 1. In each Data Check task, turn on **Notify on failure** and select the recipients 2. Send warnings to the data team only; send critical failures to the business owner as well 3. To also receive a scheduled summary, go to **Automations** → **New Automation** → **Messaging**, select the View to attach (it is attached as a CSV), and choose a schedule > Tip: Watch Needs Attention\ Watch the **Needs Attention** tab in **Monitor** for paused or failed items across your project. --- ## Step 6: View insights for automated anomaly detection For datasets where you do not know in advance what "bad" looks like: 1. Open your dataset → click **View Insights** (the AI insights panel) 2. Mammoth analyzes the data and surfaces a set of AI-generated insights 3. Look specifically for: unusual distributions, unexpected correlations, outlier clusters 4. Any insight that looks wrong is a quality issue. Drill in with a filter to investigate ![Mock insights panel listing auto-detected findings: a null spike, a date gap, outlier amounts and a correlation.](https://mammoth.io/docs/images/20260805_054408_data-quality-insights1.webp) ## Results to expect - **Detection:** problems surface in the same pipeline run that introduces them, instead of after a report has gone out - **Coverage:** every refresh runs the same checks, instead of ad hoc spot checks - **Downstream protection:** a check set to **Pause the pipeline** blocks downstream tasks until the data is fixed or approved --- ## Variations: vendors, audit trail and threshold tuning **Multi-source quality comparison**\ If you receive data from multiple vendors in the same schema, run quality checks on each source separately and compare scores. Vendors with consistently lower quality scores get flagged for remediation conversations. **Compliance-grade audit trail**\ For SOX or HIPAA compliance, use the **Activity Log** (Enterprise plans can export it) as a timestamped record of pipeline runs and user actions. It does not record individual check values, so keep your own log of check results if auditors need them. **Threshold tuning**\ After your first month of monitoring, review your false positive rate. If too many warning emails are noise, relax the thresholds. Use the Data Check run details to see how close your data came to each threshold, and set data-driven thresholds from that. --- # Financial reporting URL: https://mammoth.io/docs/guides/use-cases/financial-reporting/ · Updated: 2026-11-02 Automate month-end close, consolidate financial data, and create board-ready dashboards in Mammoth. Month-end reporting involves mechanical work: pulling GL exports, matching formats across entities, calculating year-over-year and month-over-month variances, and formatting the results. This guide is for controllers and FP&A analysts. It shows how to automate that work in Mammoth. **What you will build:** A recurring financial reporting pipeline that consolidates multi-entity GL data, computes period-over-period comparisons, and produces ready-to-share P&L and variance reports. ![Mock P&L dashboard comparing March and February 2026: revenue, costs, net income, with dollar and percent variances.](https://mammoth.io/docs/images/20260805_054450_financial-reporting-pl-dashboard1.webp) ## The challenge of multi-entity month-end close A typical monthly close workflow for a multi-entity company: 1. Finance team pulls GL exports from an ERP (SAP, NetSuite, QuickBooks, and others), one per entity 2. Each entity uses slightly different account code formats and naming conventions 3. An analyst spends hours in Excel: vlookups, format fixes, manual variance calculations 4. The final P&L goes to leadership days after the period closes In Mammoth, steps 2 to 4 are automated. The only manual step is uploading the GL export, which a connector to your ERP or database can also automate. ## Requirements - GL export files per entity (CSV or Excel), or a connector to your ERP or database - A chart of accounts mapping file (maps account codes to standardized names) - Mammoth workspace with at least one project --- ## Step 1: Set up your data structure ### Upload GL exports 1. In your project's Data Library, click **+ New Dataset** and upload a file 2. Upload your GL export for the current period 3. Repeat for each entity, naming datasets consistently: `GL_EntityA_2026_03`, `GL_EntityB_2026_03` > Tip: Append monthly files\ If you do this monthly, use **Add or Replace Data** with **Combine with older data** to append new period files to the same dataset. See [Batch management](https://mammoth.io/docs/learn/data-sources/batch-management/). ### Upload the chart of accounts 1. Click **+ New Dataset** and upload your chart of accounts mapping file as a separate dataset 2. This file should have at minimum: `AccountCode`, `AccountName`, `Category` (Revenue, COGS, OpEx, etc.), `SubCategory` --- ## Step 2: Standardize account codes Different ERP systems and entities export account codes in different formats. Normalize them before joining. 1. Open your GL dataset in the Data Editor 2. If account codes have inconsistent padding (e.g., "1000" vs "01000"), type in the **Describe your transformation** bar (the AI Prompt bar) 3. Type: "Standardize AccountCode to 6-digit zero-padded format" 4. Review the suggested task and apply 5. Repeat for each entity dataset **Handle entity-specific naming:** 1. Add a **Bulk Replace** task on the `AccountName` column 2. Map entity-specific names to the canonical names from your chart of accounts --- ## Step 3: Consolidate entities Join all entity GL files into a single consolidated dataset. 1. In each entity dataset, add a **Conditional Filter** to scope to the current period 2. Add an `Entity` column to each (**Add column**, then **Label & Insert Values** with the entity name). This preserves which rows belong to which entity after consolidation 3. Create the consolidated dataset from Entity A, then for each other entity open **Add or Replace Data** on it, choose **Select existing**, pick the entity's dataset, and use **Combine with older data** --- ## Step 4: Join chart of accounts 1. Add a **Lookup** task 2. Join on `AccountCode` (your GL dataset) → `AccountCode` (chart of accounts) 3. Pull in: `AccountName`, `Category`, `SubCategory`, `ReportingOrder` This gives every GL row a standardized category label, which you need for grouping in the P&L. --- ## Step 5: Calculate period-over-period comparisons To show current versus prior period variance, you need both periods in the same dataset. **Option A: Aggregated comparison (two Views joined)** 1. Add a **Group & Pivot** task: group by `AccountCode`, `Category`, `SubCategory`; sum `Amount` for current period 2. Add a second aggregation task scoped to prior period using **Conditional Filter** + **Group & Pivot** 3. Join the two aggregation outputs on `AccountCode` using **Lookup** 4. Add a **Math Function** task to calculate: - `Variance_Abs = "CurrentAmount" - "PriorAmount"` - `Variance_Pct = ("CurrentAmount" - "PriorAmount") / ABS("PriorAmount") * 100` **Option B: Use Window function for rolling comparisons** For rolling 12-month or YTD comparisons: 1. Use **Window function** with the **Lag** function to pull prior-period values within the same dataset 2. Set **Group by** to `AccountCode` and **Add Sort** on `PeriodDate` --- ## Step 6: Build the P&L view 1. Add a **Group & Pivot** task: group by `Category` and `SubCategory`, enable pivot to reshape from long format (one row per period) to wide format (columns = months) 2. In the **Group & Pivot** configuration, set the column to pivot on as `PeriodDate` and order the output columns chronologically The resulting View is your automated P&L—ready for a dashboard or export. --- ## Step 7: Build and share the dashboard 1. Click **+ Create Dashboard** from your P&L View 2. Prompt: "Show a P&L table with current month, prior month, variance $, and variance %, and highlight negative variances in red" 3. Add filters: entity, department, date range 4. Click **Publish & Share** → set **Access Type** to **Authenticated** for internal finance team, or **Public** if you need to share with external auditors who do not have Mammoth accounts **Export options:** - **Download** as Excel or CSV for auditors or leadership who prefer spreadsheets - **Live Link**: an auto-updating URL that reflects the latest data every time the pipeline runs - **Export** → a database or file destination: push to BigQuery, PostgreSQL, SQL Server, Redshift, or SFTP for use in Tableau or Power BI (see [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/)) --- ## Step 8: Automate monthly close 1. Open **Automations** in the project sidebar → **New Automation** → **Dataset Refresh** (if the GL comes from a connector) 2. Or set up a **Messaging** automation to email the P&L View as a CSV attachment to your CFO and controller on a fixed day each month 3. Configure: repeat every 1 **Month** on the 3rd at 7:00 AM (schedules run on a fixed day of the month, not on business days) 4. Attach: the P&L View --- ## Results to expect Once the pipeline is in place: - Close prep is the review of the output, not the manual cleanup - The consolidated, multi-entity view updates as soon as new GL data is loaded - Leadership can open the published dashboard themselves instead of waiting on one analyst - The transformation tasks are recorded in the pipeline, so the same logic runs every period --- ## Variations for budget, EBITDA and currency **Budget versus actuals**\ Upload your budget file as a separate dataset and join it to actuals on `AccountCode` + `Period`. Add `Budget`, `Actual`, and `Variance` columns. **EBITDA calculation**\ After consolidation, add a **Math function** task:\ `EBITDA = Net Income + Interest + Taxes + Depreciation + Amortization`\ Map your chart of accounts `SubCategory` values to the EBITDA components. **Multi-currency**\ Add a currency conversion lookup table and a **Math function** task to normalize all amounts to your reporting currency before aggregation. --- # Use cases URL: https://mammoth.io/docs/guides/use-cases/ · Updated: 2026-11-02 Eight Mammoth workflows for sales analytics, financial reporting, customer cohorts, dashboards, data quality, multi-source integration and batch processing. Each use case guide walks through a complete workflow: the business problem, how to set it up in Mammoth, and the result. The guides are written for analysts and team leads. Pick the one closest to your situation. ## Where to start If your team has a recurring Excel file or manual report that takes more than 30 minutes a week, begin with [Sales analytics](https://mammoth.io/docs/guides/use-cases/sales-analytics/) or [Operational dashboards](https://mammoth.io/docs/guides/use-cases/operational-dashboards/). ## Business analytics - [Sales analytics](https://mammoth.io/docs/guides/use-cases/sales-analytics/): CRM reporting and pipeline tracking. - [Financial reporting](https://mammoth.io/docs/guides/use-cases/financial-reporting/): P&L, period-over-period comparison, and general ledger automation. - [Customer cohort analysis](https://mammoth.io/docs/guides/use-cases/customer-cohorts/): Segmentation, RFM, and lifetime value. - [Operational dashboards](https://mammoth.io/docs/guides/use-cases/operational-dashboards/): Frequently refreshed KPI monitoring. ## Data operations - [Data quality monitoring](https://mammoth.io/docs/guides/use-cases/data-quality/): Automated validation and anomaly detection. - [Multi-source integration](https://mammoth.io/docs/guides/use-cases/multi-source-integration/): Master data and consolidated reporting. - [Batch processing workflows](https://mammoth.io/docs/guides/use-cases/batch-processing-workflows/): High-volume, scheduled data operations. ## AI-assisted analytics - [AI dashboard creation](https://mammoth.io/docs/guides/use-cases/ai-dashboard-creation/): Dashboard prototyping from natural language descriptions. --- # Multi-source integration URL: https://mammoth.io/docs/guides/use-cases/multi-source-integration/ · Updated: 2026-11-02 Build one master dataset in Mammoth from CRM, ERP, database, file and API sources: normalize schemas, deduplicate names, resolve conflicts and refresh. The master data problem: five systems, each with authoritative data on a slice of your business, each with its own schema, naming conventions, and update cadence. The result is a mess of VLOOKUPs, manual reconciliation, and reports that do not agree. This guide is for data engineers, integration specialists, and analysts. It shows how to build a single, authoritative master dataset in Mammoth that consolidates multiple sources, resolves conflicts, handles schema differences, and stays current automatically. **What you will build:** A master dataset that ingests from multiple sources, normalizes schemas, deduplicates records, and refreshes on a configurable schedule. ![Salesforce, ERP, Google Sheets, PostgreSQL and CSV/Excel sources feed Mammoth pipelines that output a master dataset.](https://mammoth.io/docs/images/20260805_054538_multi-source-architecture1.webp) --- ## The challenge of integrating multiple sources Multi-source integration problems compound: - Source A uses `customer_id`, Source B uses `CustomerID`, Source C uses `cust_no` - The same company appears as "Acme Corp", "ACME", and "Acme Corporation" across sources - Sources update at different cadences: CRM hourly, ERP daily, warehouse weekly - Any single source can have gaps; the integrated view should fill from others --- ## Step 1: Map your sources Before building, document what you are consolidating. For each source: | Source | Type | Key field | Update cadence | Schema notes | | --- | --- | --- | --- | --- | | Salesforce CRM | Connector | `AccountId` | Scheduled refresh | Account.Name, Industry, Region | | NetSuite ERP | File upload | `Customer_Code` | Daily export | Different region codes | | Google Sheets | Connector | `cust_id` | Manual updates | Marketing team maintains | | Warehouse DB | Connector | `CUST_NO` | Weekly | Most authoritative for revenue | | Support tickets | Webhook or REST API connector | `customer_id` | As events arrive | Health score data | This mapping is your integration contract. You will reference it throughout the build. --- ## Step 2: Normalize each source For each source, build a normalization pipeline that outputs a consistent schema. **Standard output schema:** ```plaintext customer_id_canonical | string : normalized unique identifier company_name_canonical | string : deduplicated company name region_canonical | string : standardized region (AMER/EMEA/APAC) industry_canonical | string : standardized industry source_system | string : which source this row came from source_updated_at | date : when the source record was last updated ``` **Normalize Salesforce:** 1. Connect Salesforce Account data via **+ New Dataset** → **Connectors** → **Salesforce** 2. Transform: - Use **Rename Column** in each column's menu to match the standard schema: `AccountId` → `customer_id_canonical`, `Name` → `company_name_canonical` - **Bulk Replace** on `Region` to normalize to AMER/EMEA/APAC - **Add column** `source_system`, then **Label & Insert Values** with the constant value `salesforce` Repeat this normalization pattern for each source, producing one dataset per source with identical schemas. --- ## Step 3: Deduplicate company names The hardest part of master data: "Acme Corp" and "ACME Corporation" are the same company. 1. Combine all normalized datasets into one (see Step 4 for the pattern) 2. On the consolidated dataset, add a **Generative AI** task 3. Describe: "Standardize the company_name_canonical column. Consolidate variations of the same company into a single canonical form. Use the most complete or official version (for example, prefer 'Acme Corporation' over 'ACME' or 'Acme Corp')." 4. Select `company_name_canonical` as the context column and preview the output 5. Review the output: spot check a sample of rows, and correct any mismatches using **Bulk Replace** ![Mock preview: ten company-name variants consolidated by Generative AI into three canonical companies with total revenue.](https://mammoth.io/docs/images/20260805_054603_multi-source-deduplication1.webp) > Tip: Generative AI row limit\ Generative AI processes only the first 50,000 rows of a view and writes at most 300 characters per value. For larger datasets, deduplicate in stages, or use **Bulk Replace**, which groups the unique values of a column for you. --- ## Step 4: Consolidate with priority rules Append all normalized sources, then apply priority rules where sources conflict. ### Consolidate all sources 1. Open your first normalized dataset (e.g., Salesforce) 2. In each additional source's pipeline, add a **Send to dataset** task (**Unify**) pointing to the consolidated dataset, with Update Method **Combine data** 3. Result: all rows from all sources, one per record per source, in a single consolidated dataset ### Resolve conflicts with priority rules When the same company appears in multiple sources with different values, you need a rule for which source wins. 1. Decide which source owns each field: - `revenue`: the warehouse DB (most authoritative) - `region`: Salesforce - `industry`: Salesforce - `health_score`: Support tickets 2. Create one View per owning source using a **Conditional Filter** on `source_system` (for example, `source_system` is `warehouse_db`) 3. Starting from a View with one row per `customer_id_canonical` (use **Remove duplicate rows**), bring in each field from its owning source's View with **Lookup** (one value) or **Join** (several columns) on `customer_id_canonical` --- ## Step 5: Add a freshness indicator Track which sources contributed to each master record and when they last updated. 1. Add a **Calculate date difference** task: Start Date `source_updated_at`, End Date **Current Time (UTC)**, unit **Days**, new column `DaysSinceUpdate` 2. Add an **AI SQL Query** task: "Add a FreshnessStatus column: 'Stale' if DaysSinceUpdate is greater than 7, otherwise 'Current'" 3. This becomes your master data freshness dashboard --- ## Step 6: Set up multi-source refresh automation Each source updates on a different schedule. Set up refreshes for each: 1. Open **Automations** in the project sidebar → **New Automation** 2. Create **Dataset Refresh** automations for each connector source (Salesforce, Google Sheets, the warehouse DB) 3. Stagger the schedules, for example Salesforce at 5 AM and the warehouse at 5:30 AM, so the sources are current when downstream tasks run 4. A **Send to dataset** task runs whenever its pipeline runs, so the consolidated dataset updates as each source refreshes. Automations cannot yet wait on one another, so allow enough time between schedules --- ## Step 7: Send the master dataset to downstream destinations 1. Open your master dataset's View in the Data Editor 2. Use **Export** to add a destination 3. Options: - **Export** → **Databases** → BigQuery, PostgreSQL, SQL Server, or Redshift: push the master dataset to your data warehouse - **Live Link**: an auto-updating URL for BI tools (Tableau, Power BI) or lightweight consumers - **Export** → **Tableau Server/Cloud**, SFTP, or REST API Export for other downstream systems --- ## Results to expect - One authoritative master dataset replaces several separate reports - Source and update date are tracked on every record - Business teams can read the master dataset or its dashboards without maintaining the reconciliation themselves --- ## Variations: schema drift and golden records **Handle schema drift**\ When Source A adds a new column, your normalization pipeline silently excludes it (it is not in the standard schema). Mammoth pauses the update and prompts you when a refresh or new file looks different from what you saved, so review the new columns and update your standard-schema mapping. **Golden record pattern**\ For true MDM (master data management), the "source wins" priority rule is not enough. Build a golden record by scoring each source field's completeness and recency, then taking the highest-scoring value regardless of source. --- # Operational dashboards URL: https://mammoth.io/docs/guides/use-cases/operational-dashboards/ · Updated: 2026-11-02 Connect Mammoth to an operational database, build KPI Views, create a scheduled-refresh dashboard with AI, and share it with floor teams on desktop or mobile. Operations teams need to know what is happening now, not what happened last Monday when someone last exported from the ERP. This guide is for operations managers and analysts. It walks through building dashboards that pull from your operational databases and refresh on a schedule you set. **What you will build:** An operations monitoring dashboard connected to your database, showing KPIs by shift, line, or region, refreshed on a schedule, with a shareable link that works on mobile. ![Mock operations dashboard: KPI tiles (units, defect rate, OEE, on-time delivery), hourly throughput chart, open issues table.](https://mammoth.io/docs/images/20260805_054646_OperationalDashboard.webp) --- ## Industries and KPIs this pattern covers This pattern applies to: - **Manufacturing**: production throughput, quality metrics, machine utilization (OEE) - **Retail**: store-level sales versus plan, inventory levels, shrinkage - **Logistics**: on-time delivery rate, open shipments, exceptions - **Field service**: open tickets, SLA compliance, technician utilization - **Finance operations**: transaction processing rate, exceptions, reconciliation status The pattern is the same for each; only the KPIs and the database change. --- ## Requirements - A database that Mammoth can connect to (SQL Server, PostgreSQL, MySQL, Snowflake, and others—see [Connectors](https://mammoth.io/docs/learn/connectors/)) - Read access to the relevant tables - A Mammoth workspace and project --- ## Step 1: Connect to your operational database 1. In your Mammoth project's Data Library, click **+ New Dataset** → **Connectors** 2. Select your database type (SQL Server, PostgreSQL, Snowflake, etc.) 3. Enter your connection credentials (Live Connections are stored per project) 4. Select the tables or views you need > Tip: Use a database view\ If your database does not allow direct connections from external IPs, use a **database view** that your DBA creates and grants read access to. This limits exposure to only the columns operations need. --- ## Step 2: Build the transformation pipeline Data from operational databases is rarely dashboard-ready. Common transformations include: **Filter to relevant time window** 1. Add a **Conditional Filter**: `ShiftDate` is on or after a cutoff date (for example, 7 days back) 2. This keeps the dataset small and fast to query. The filter compares against a fixed value, so move the cutoff forward when needed, or filter in the source query instead **Standardize status codes** 1. Add **Bulk Replace** on status or code columns: "IN PROG" → "In Progress", "CMPLT" → "Complete" 2. Use AI suggestion to catch all variants **Calculate KPIs** Use the **Math function** and **Group & Pivot** tasks: | KPI | Formula | Implementation | | --- | --- | --- | | OEE | (Availability × Performance × Quality) × 100 | Math function | | Defect Rate | (DefectCount / TotalProduced) × 100 | Math function | | On-Time Rate | Count of on-time rows / total rows × 100 | Group & Pivot (Count), then Math function | | Throughput/Hour | Sum of Units grouped by HourOfDay | Group & Pivot | --- ## Step 3: Create targeted Views Create separate Views for different dashboard sections to keep each query fast: - **KPI Summary View**: one row with today's summary metrics - **Hourly Throughput View**: GROUP BY hour, last 24 hours - **Open Issues View**: filtered to unresolved items, sorted by priority - **Line/Shift Comparison View**: GROUP BY production line and shift Each View updates whenever the underlying dataset refreshes (see Step 5). --- ## Step 4: Build the dashboard with AI 1. From any of your Views, click **Create Dashboard** 2. Let AI generate the initial layout: "Build an operations dashboard with KPI summary cards at top, throughput trend by hour in the middle, and open issues table at the bottom" 3. To use your other Views, ask the Dashboard Assistant to add or change the connected Views **Key design principles for ops dashboards:** - **KPI cards first**: managers need the headline numbers at a glance, no scrolling - **Color code for status**: green, yellow, and red indicate whether each KPI is in target - **Trend, not just snapshot**: a line chart of the last 24 hours is more useful than a single number - **Action items visible**: the open issues table is the "what to do now" section --- ## Step 5: Configure refresh Operational dashboards need to stay current without manual intervention. A dashboard shows the data in its connected Views, so keep those datasets fresh with a **Dataset Refresh** automation: 1. Open **Automations** in the project sidebar → **New Automation** → **Dataset Refresh** 2. Select the dataset and set the schedule, for example every 3 hours (or daily for less time-sensitive operations). The shortest interval depends on your plan—see [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/) 3. In the dashboard's sync settings, turn on **Sync automatically** (new rows come into your draft when the pipeline runs) and **Publish new data automatically** (new rows go live as soon as they sync). Otherwise, new data reaches viewers only after you sync and publish --- ## Step 6: Share with the operations team Click **Publish & Share** on your dashboard, then set the **Access Type**: **For internal ops team (Mammoth users):** - Set **Access Type** → **Authenticated** - Team members sign in to Mammoth and see the live dashboard **For floor managers and always-on displays (factory floor TVs, tablets):** - Set **Access Type** → **Public**: anyone with the link can view without signing in - For floor displays: open the URL in a browser on the display; the data is as fresh as your last dataset refresh and dashboard sync - For mobile access: managers open the URL on any phone or tablet—no app required - Share the link via email, a posted QR code at the facility, or a pinned message in your ops Slack channel > Tip: Public links are not restricted\ **Public** means anyone with the link can view. Share the link only through controlled channels (direct email, QR code in a secure facility) rather than posting it publicly. For highly sensitive operational data, use **Authenticated** and invite external users as workspace members. ## Results to expect - Managers read KPIs from a shared URL instead of emailing an analyst - KPIs from several systems appear in one view - The dashboard link opens on a phone or tablet, with no app required --- ## Variations: multi-site, alerts and daily exports **Multi-site comparison**\ If you have multiple facilities, add a site filter dropdown to the dashboard. Managers can drill into their site or see the company-wide view. **Alert thresholds**\ Add a **Data Check** task with a **Value range** check on the KPI column (e.g., defect rate), set to **Flag and continue** or **Pause the pipeline**, and turn on **Notify on failure** to email the recipients you choose when the KPI goes out of range. **Export for daily standup**\ Schedule a daily 8 AM **Messaging** automation that emails the KPI summary View as a CSV attachment to the operations leadership group, so they have the numbers before the standup. --- # Sales analytics URL: https://mammoth.io/docs/guides/use-cases/sales-analytics/ · Updated: 2026-11-02 Build an automated sales reporting pipeline in Mammoth, from Salesforce opportunity data to a refreshed, shareable dashboard. Every sales team has the same problem: reports that take hours to prepare manually and are already stale by the time they are shared. This guide is for sales operations and revenue analysts. It walks through building an automated sales reporting pipeline in Mammoth, from raw CRM data to a shareable dashboard. **What you will build:** A scheduled pipeline that pulls Salesforce opportunity data, cleans and transforms it, and powers a dashboard showing pipeline by stage, rep performance, and deal velocity. ![Mock sales dashboard: pipeline funnel by stage, rep performance table, deal velocity line chart, monthly closed-won bars.](https://mammoth.io/docs/images/20260805_054821_SalesAnalyticsDashboard.webp) --- ## The challenge of manual sales reporting A typical enterprise sales operations setup looks like this: - Sales data lives in Salesforce (or HubSpot, Dynamics, etc.) - A RevOps analyst manually exports CSVs each Monday morning - They spend a long time cleaning the export in Excel (fixing null values, standardizing stage names, calculating pipeline velocity) - The resulting report is emailed out hours after the data was current In Mammoth, every step after "data lives in Salesforce" is automated. --- ## Requirements - Mammoth workspace with at least one project - A Salesforce account with API access (see [Salesforce connector setup](https://mammoth.io/docs/learn/connectors/salesforce-connector/)) - The Opportunity and User objects visible to the Salesforce user you connect with - Destination: Mammoth dashboard, or a downstream BI tool such as Tableau or Power BI (via a [Live Link](https://mammoth.io/docs/learn/export-share/live-links/) or [database export](https://mammoth.io/docs/learn/export-share/send-to-destinations/)) --- ## Step 1: Connect to Salesforce Connect Salesforce to Mammoth with the [Salesforce connector](https://mammoth.io/docs/learn/connectors/salesforce-connector/). 1. In your project, go to **Data Library** and click **+ New Dataset** → **Connectors** 2. Select **Salesforce** from the connector list 3. Enter your instance URL, click **Connect**, and authorize Mammoth in Salesforce 4. Select the Opportunity object and include: `Id`, `Name`, `StageName`, `Amount`, `CloseDate`, `OwnerId`, `CreatedDate`, `LastModifiedDate`, `Probability` 5. Import the data. Mammoth creates a dataset from your current opportunities > Tip: Include LastModifiedDate\ Pull `LastModifiedDate` even if you do not need it now. You need it for incremental refresh later. --- ## Step 2: Clean the data Raw Salesforce exports need cleaning before they're useful for reporting. Common issues: **Fix stage name inconsistencies.** Salesforce often accumulates legacy stage names from previous sales processes. 1. Open your dataset in the Data Editor and click **+** in the pipeline panel 2. Choose **Filter, Label & Replace** → **Bulk Replace** and select the `StageName` column 3. Use the AI-suggested groupings to map legacy values to current ones (e.g., "Qualification", "Qualify", "Qualifying" → "Qualification") 4. Click **Apply** **Handle null amounts** 1. Add a **Label & Insert Values** task, enter `0`, choose **Some cells**, and add the condition `Amount` is empty 2. Place the value in the existing `Amount` column 3. Note in the pipeline description that a null amount means an unquoted opportunity **Standardize the date range** 1. Add a **Conditional Filter** task: `CloseDate` → is after → a fixed cutoff date 2. This scopes the dataset to the period you report on, keeping the pipeline fast. The filter compares against a fixed value, so update the cutoff date when the window needs to move --- ## Step 3: Add calculated fields Add three derived columns to the pipeline: **Days open** 1. Add a **Calculate date difference** task (under **Date, Numeric & Text**) 2. Set Start Date to `CreatedDate`, End Date to **Current Time (UTC)**, and the unit to **Days** 3. Name the new column `DaysOpen` **Pipeline tier** 1. Add an **AI SQL Query** task 2. Describe the rule: "Add a PipelineTier column: Small if Amount is under $10K, Mid from $10K to $100K, Large above $100K" 3. Review the generated SQL, then apply it **Weighted pipeline value** 1. Add a **Math function** task 2. Formula: `"Amount" * ("Probability" / 100)` 3. Name the new column `WeightedValue` --- ## Step 4: Build the dashboard 1. From your cleaned View, click **Create Dashboard** 2. On the prompt screen, type: "Show pipeline by stage, rep performance by closed-won amount this quarter, and deal velocity by month" 3. Mammoth generates the initial dashboard and opens it in the editor 4. Refine individual cards by continuing the conversation in the Dashboard Assistant **Key cards to include:** | Card | Chart type | Data | | --- | --- | --- | | Pipeline by stage | Funnel or bar | Count and amount by StageName | | Rep performance | Table | OwnerId, Count, WeightedValue, Won | | Deal velocity | Line chart | Average days to close by month | | Monthly closed-won | Bar chart | Sum of Amount where Stage = Closed Won | --- ## Step 5: Schedule automated refresh 1. Open **Automations** in the project sidebar and click **New Automation** → **Dataset Refresh** 2. Select your Salesforce dataset as the source 3. Set a daily schedule early in the morning (so data is ready before the business day starts) 4. Name the automation, review the settings, and save 5. Check the automation's status in the list after the first scheduled run Your pipeline now refreshes automatically on that schedule, and the dashboard reflects the latest CRM data after each run. --- ## Step 6: Share the dashboard 1. Open your dashboard → click **Publish & Share** (top right) 2. Set the **Access Type**: - **Authenticated**: viewers must sign in to Mammoth. Use for internal stakeholders who have workspace access. - **Public**: anyone with the link can view without signing in. Use for executives, external partners, or embedded portals. 3. Toggle the status to **Published** 4. Copy the link and share in your Slack sales channel or weekly email > Tip: Email the View on a schedule\ Use a **Messaging** automation (Automations → New Automation → Messaging) to email the underlying View as a CSV attachment on a schedule, for example every Monday morning, with a link to the published dashboard in the message. --- ## Results to expect Once the pipeline is running: - **Report prep:** no manual export or cleanup, because every task runs in the pipeline - **Data freshness:** as current as your last scheduled refresh - **Stakeholder access:** anyone with the dashboard link (or an invite) can view it --- ## Variations and next steps for the sales pipeline **Add multi-currency support**\ If your Salesforce instance uses multiple currencies, add a currency normalization task using **Lookup** to join against a currency conversion table. **Add historical trending**\ Set the refresh method on your **Dataset Refresh** automation to **Combine** to build a rolling history. Each run appends data rather than replacing the full dataset, so filter to recently modified records and remove duplicates to avoid double-counting. **Extend to forecast**\ Add a parallel pipeline for Forecast Category data and join it to your Opportunity dataset using the `OpportunityId` key. --- # Mammoth Analytics Documentation URL: https://mammoth.io/docs/ · Updated: 2026-11-02 Documentation for Mammoth Analytics. Start with the quick start, connect data, build pipelines and dashboards, or use the REST API, Python SDK, and CLI.
## Browse by topic

Data Sources

Connect to databases, cloud storage, and SaaS applications

Data Exploration

Visual exploration tools and data quality checks

Data Transformation

Clean, combine, and transform data visually

Dashboards

Create and share interactive visualizations

Automation

Schedule and trigger data workflows

Administration

Manage workspaces, users, and access controls

--- # Automation types URL: https://mammoth.io/docs/learn/automations/automation-types/ · Updated: 2026-11-02 Compare the four Mammoth automation types (Dataset Refresh, Data Consolidation, File Collection, Messaging) by trigger, source, destination, and schedule. Mammoth has four automation types: Dataset Refresh, Data Consolidation, Messaging, and File Collection. Each solves a different problem. This page compares them so you can choose one, then links to the setup guide for that type. ![20261008_033427_automation-tab-in-data-library.png](https://mammoth.io/docs/images/20261008_123525_20261008_033427_automation-tab-in-data-library.webp) ## Quick comparison | | Dataset Refresh | Data Consolidation | File Collection | Messaging | | --- | --- | --- | --- | --- | | **What it automates** | Pulling fresh data from cloud sources | Merging uploaded files into a dataset | Collecting files from external cloud sources | Sending email reports | | **Trigger** | Schedule (time-based) | File upload event | Schedule or manual | Schedule (time-based) | | **Source** | Cloud-connected dataset | Folder in your Data Library | Folders in a cloud platform | Dataset Views | | **Destination** | Updates the same dataset | Appends/replaces a target dataset | Folder in Mammoth | Email recipients | | **Schedule options** | Minutely → Yearly (shortest interval depends on your plan) | Event-driven (no schedule) | Minutely → Yearly (shortest interval depends on your plan) | Hourly → Yearly (shortest interval depends on your plan) | ## Dataset Refresh Use Dataset Refresh to keep cloud-connected datasets current. When a dataset is connected to a third-party source (Google Sheets, Salesforce, a database, etc.), it reflects data from the moment it was created. Dataset Refresh re-fetches the latest data on a schedule. **Best for:** - Daily CRM or ERP data pulls - Regularly updated Google Sheets you query in Mammoth - Any source where data changes frequently and you want it reflected automatically **How a Dataset Refresh is triggered:** You set a repeat interval (every N minutes, hours, days, weeks, months, or years). Optionally configure a start date and an end date. **One automation, multiple datasets:** A single Dataset Refresh automation can refresh multiple cloud datasets at once, all on the same schedule. ## Data Consolidation Use Data Consolidation to automatically process incoming files. When your team uploads CSV or Excel files to a designated source folder, this automation appends the data to a target dataset—without any manual intervention. **Best for:** - Sales teams dropping daily export files into a shared folder - Field teams uploading regional reports that need to be combined centrally - Any workflow where periodic file uploads feed a master dataset **How a Data Consolidation is triggered:** The automation watches the source folder. Any new file uploaded to that folder triggers consolidation automatically. There is no schedule—it fires on each upload event. **Two consolidation modes:** - **Combine**—Appends new file data to the existing dataset (rows accumulate over time) - **Replace**—Overwrites the dataset with the new file's data each time > **Note:** Both source files and the target dataset must share compatible column schemas. Mammoth validates the schema before consolidating. ## Messaging Use Messaging to send automated email notifications with data attached. You configure a schedule, a list of recipients, an email subject and body, and one or more Dataset Views to attach. Mammoth sends the email at each scheduled interval with the latest data exported as attachments. **Best for:** - Weekly KPI reports to executives - Daily sales summaries to the sales team - Any situation where stakeholders need data delivered to their inbox on a schedule **How a Messaging automation is triggered:** Schedule-based. Messaging offers the same frequency options as Dataset Refresh, except Minute. **Attachment format:** Dataset Views are exported as CSV files and attached to the email. **Row limit:** The attached views can total at most 100,000 rows (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)). If the combined row count is higher, Mammoth does not let you attach them. Choose views with fewer rows or attach fewer views. **Test before sending:** You can click **Send test email** on the creation form to verify the email and attachment arrive correctly before saving the automation. ## File Collection Use File Collection to automatically collect files from folders in external cloud platforms into a destination folder in Mammoth. It is available on plans that include it. **Best for:** - Pulling files that partners or systems drop into cloud storage into Mammoth without manual downloads **Sources:** You pick a cloud platform and then the folder or folders to collect from. Platforms offered include Dropbox, Google Cloud Storage, Google Drive, Email (IMAP), SFTP, SharePoint, and OneDrive. You can include folders nested inside the ones you pick, and you can limit collection to file names that start with, end with, contain, or exactly match a pattern. **Destination:** Choose a folder inside Mammoth where the collected files are stored. **How a File Collection is triggered:** On a schedule, or manually. ## Choosing between types | Scenario | Recommended type | | --- | --- | | My dataset connects to Salesforce and needs daily updates | Dataset Refresh | | My team uploads CSV files every morning to a shared folder | Data Consolidation | | Finance needs a Monday morning report emailed to them | Messaging | | Partners drop files into cloud storage and I want them in a Mammoth folder | File Collection | | I want to pull data AND email a report | Create one of each—they're independent | To set one up, see [Creating an automation](https://mammoth.io/docs/learn/automations/creating-an-automation/). --- # Creating an automation URL: https://mammoth.io/docs/learn/automations/creating-an-automation/ · Updated: 2026-11-02 Steps shared by every Mammoth automation: open the Automations tab, choose a type, complete its steps, name it, and save. This page walks through the common steps for creating any automation, then points you to the type-specific details for each form. ## Before you start - You need access to the project where you want to create the automation. - For **Dataset Refresh**: the datasets you want to refresh must already be connected to a cloud source. - For **Data Consolidation**: the source folder and destination dataset must already exist in your Data Library. - For **Messaging**: the Dataset Views you want to attach must already exist in your project. ## Step 1: Open the Automations tab In the Data Library, click the **Automations** tab. This opens the list of automations for the current project. If no automations exist yet, the page offers to create your first one. If automations already exist, the list appears. ## Step 2: Click New automation Click the **New automation** button in the top-right corner of the screen. The New automation modal opens, showing the available types. ![20261008_035322_create-automation-wizard-with-all-options.png](https://mammoth.io/docs/images/20261008_124225_20261008_035322_create-automation-wizard-with-all-options.webp) ## Step 3: Select a type Click on the option for the automation type you want to create: - **Dataset Refresh**—Refreshes cloud-connected datasets on a schedule - **Data Consolidation**—Consolidates uploaded files into a dataset automatically - **Messaging**—Sends email reports with attached views on a schedule - **File Collection**—Collects files from external cloud sources into a Mammoth folder. Available on plans that include it Clicking a card starts the step-by-step creation flow for that type. ## Step 4: Complete the steps Each type has its own steps. See the dedicated guides: - [Creating a Dataset Refresh automation](https://mammoth.io/docs/learn/automations/dataset-refresh/) - [Creating a Data Consolidation automation](https://mammoth.io/docs/learn/automations/data-consolidation/) - [Creating a Messaging automation](https://mammoth.io/docs/learn/automations/messaging/) - **File Collection**: Choose a cloud platform (Dropbox, Google Cloud Storage, Google Drive, Email (IMAP), SFTP, SharePoint, or OneDrive), pick the folders to collect from, optionally filter by file name, and choose the Mammoth destination folder. See [File Collection](https://mammoth.io/docs/learn/automations/automation-types/#file-collection) for the options. On the final review step, give the automation a descriptive name before you save it. ## Step 5: Save the automation On the last step, review the settings and click **Save automation**. **Expected result:** The automation is created and appears in the list with status **Active**. ## What happens after creation - **Dataset Refresh and Messaging**: If you selected "now" as the start, the schedule starts immediately. Otherwise, the first run occurs at the scheduled time. - **Data Consolidation**: The automation begins watching the source folder immediately. The next file uploaded to that folder triggers the first consolidation. ## Editing an automation After creation, you can edit an automation at any time from the detail panel or the three-dot menu. See [Managing automations](https://mammoth.io/docs/learn/automations/managing-automations/). --- # Data Consolidation URL: https://mammoth.io/docs/learn/automations/data-consolidation/ · Updated: 2026-11-02 Create a Data Consolidation automation that merges files uploaded to a source folder into a destination dataset using Combine or Replace. Data Consolidation automatically processes files uploaded to a source folder and merges them into a destination dataset. Every time a new file lands in the folder, Mammoth triggers the consolidation—no schedule needed. ## How it works ```plaintext New file uploaded to source folder │ ▼ Mammoth detects the upload │ ▼ Schema validation (columns must be compatible) │ ▼ Consolidate into destination dataset (Combine or Replace) ``` The consolidation fires on each upload event. ## Before you start - **Source folder**: A folder in your Data Library that your team uploads files to. Create one if it doesn't exist. - **Destination dataset**: The dataset that will receive the consolidated data. It must already exist and have a schema compatible with the files you plan to upload. - **Schema compatibility**: All files uploaded to the source folder must have columns that match the destination dataset's schema. How Mammoth handles mismatches depends on the destination dataset's **If column type doesn't match** and column mapping settings. See [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/). ## Creating a Data Consolidation automation ### Step 1: Open the automation wizard Open the **New Automation** entry point (available from the Data Library header, a folder's empty-state, or a resource's context menu), then select **Data Consolidation** from the automation type picker. The wizard opens as a modal with a step indicator at the top. For Data Consolidation it walks through **Select source folder**, **Select destination**, and **Review & save**. ![20261007_190207_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-2_0 (1).png](https://mammoth.io/docs/images/20261008_124813_20261007_190207_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-2_01.webp) ### Step 2: Select the source folder In the **Select source folder** step, choose the folder that contains (or will contain) the incoming files. Once selected, the folder name appears. Any file uploaded to this folder after you create the automation will trigger consolidation. You can also refine which files are processed: - Turn on **Include subfolders** to also process files added to subfolders of the selected folder. - Turn on **Only process files matching a name pattern** to pick up only files whose names match a pattern. Choose a match type — **Starts with**, **Ends with**, **Contains**, or **Matches exactly** — and enter the text to match. Optionally turn on **Case sensitive** to require an exact-case match. If you leave name-pattern matching off, all file names are allowed and every file in the folder is processed. The "Select source folder" wizard step, showing the selected source folder with the "Switch" action, the "Include subfolders" checkbox, and the expanded name-pattern controls (match-type dropdown, text input, and Case sensitive checkbox) **Match type reference:** | Match type | Matches a file when its name... | | --- | --- | | **Starts with** | begins with the text you enter | | **Ends with** | ends with the text you enter | | **Contains** | includes the text you enter anywhere | | **Matches exactly** | is identical to the text you enter (aside from case, unless Case sensitive is on) | By default, matching is not case sensitive (`Invoice` and `invoice` are treated the same). Turn on **Case sensitive** if you need an exact-case match. > If you're editing an automation that was created before these options existed, its original "contains text" filter is preserved automatically and shown as a **Contains** match when you open it for editing. ### Step 3: Select the destination dataset In the **Select destination** step, choose the dataset that receives the data. > *"Data from the source folder will be added to this dataset."* The destination dataset must have a schema that's compatible with the files in your source folder. From this step you can also switch the destination dataset, and adjust its update/mapping settings or new-data settings inline. ![20261007_190207_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-2_2 (1).png](https://mammoth.io/docs/images/20261008_124829_20261007_190207_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-2_21.webp) ### Step 4: Review and save In the **Review & save** step, name the automation, optionally add a description, review the summary of the source folder, destination dataset, and filter settings, then click **Save automation**. The "Review & save" wizard step, showing the Name and Description fields along with the automation summary listing Type, source folder, and destination dataset ## Consolidation modes Mammoth offers two modes for how incoming data is written to the destination dataset: | Mode | Behavior | Best for | | --- | --- | --- | | **Combine** | Appends rows from the new file to the existing dataset. Data accumulates over time. | Incremental data (daily transactions, event logs) | | **Replace** | Overwrites the destination dataset with the contents of the new file. Previous data is removed. | Full snapshots (weekly inventory exports) | > Configure the update method on the destination dataset before creating the automation. ## Schema requirements Data Consolidation validates column schemas before merging. The columns in uploaded files must be compatible with the destination dataset's schema. This is a separate check from the file name filtering described in [Step 2: Select the source folder](#step-2-select-the-source-folder) — a file can match your name pattern and still fail here if its columns don't line up with the destination dataset. **What Mammoth checks:** - Column names must match (by display name) - Data types must be compatible **If a schema mismatch occurs:** - Depending on the dataset's settings, Mammoth converts the column to text, converts incompatible values to null, or does not update the dataset - If the consolidation fails, the automation status shows **Error** Keep your source files consistent. If different team members upload files with slightly different column names, the columns may not map to the destination dataset. Define a standard template for uploads. ## Monitoring consolidations Click the automation row to open the detail panel. The **Automation Summary** shows: - The source folder name - The destination dataset(s) - The last run result (Success or failure reason) The automation status in the list reflects the outcome of the most recent consolidation: | Status | Meaning | | --- | --- | | **Active** | Watching the folder; last consolidation succeeded | | **Error** | The automation has an error (for example, a deleted source or destination) | | **Suspended** | Paused—uploads to the folder will not trigger consolidation | ## Troubleshooting ### Status shows Error after a file upload **Cause:** The uploaded file's columns or data types do not match the destination dataset schema. **Fix:** Open the detail panel and check the **Last run result**. Compare the uploaded file's columns with the destination dataset schema, then correct the file and upload it again. ### Source folder or destination dataset was deleted **Cause:** The automation references a folder or dataset that no longer exists. It shows an error indicator. **Fix:** Edit the automation to point to new resources, or delete it. --- # Dataset Refresh URL: https://mammoth.io/docs/learn/automations/dataset-refresh/ · Updated: 2026-11-02 Create a Dataset Refresh automation to re-fetch cloud-connected datasets on a schedule, with Combine or Replace refresh methods and parallel or sequential runs. Dataset Refresh automatically re-fetches data from a cloud source on a schedule, keeping your dataset current without any manual intervention. When you connect a dataset to a third-party source—such as Google Sheets, Salesforce, or a database—it captures a snapshot of the data at that moment. Dataset Refresh replaces that snapshot with the latest data from the source at the interval you set. ## Before you start The datasets you want to refresh must already be connected to a cloud source. If a dataset was created by uploading a file rather than connecting to a live source, it cannot be refreshed with this automation. ## Creating a Dataset Refresh automation ### Step 1: Open the creation wizard Automations can be created from many places in the app — the Data Library header, a folder or dataset's context menu, the preview panel's Automation section, or the Automations list — not only from a dedicated Automations page. Triggering any of these opens the **create automation** modal. ![20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_0 (1).png](https://mammoth.io/docs/images/20261008_124420_20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_01.webp) In the type picker, select **Dataset Refresh**. The wizard then shows a step indicator across the top (e.g. "Select datasets" → "Set Schedule" → "Review & save") and advances to the first Dataset Refresh step. ### Step 2: Select datasets to refresh In the **Select datasets to refresh** step, choose which datasets this automation should refresh. Only datasets connected to an API or database are listed; a tooltip clarifies that databases, cloud apps, and APIs can be re-pulled on a schedule, but uploaded files can't. - You can add multiple datasets to a single automation—they will all refresh on the same schedule. - When you add several datasets, choose **In parallel** to refresh them all at once, or **In a sequence** to refresh them one after another in the numbered order shown next to each dataset. Drag datasets using the handle to reorder them. - Each selected dataset shows its **Update method**, which controls how incoming data is merged (Combine or Replace), editable inline from the same row. **Refresh methods:** | Method | Behavior | | --- | --- | | **Combine** | Appends new data to existing rows in the dataset | | **Replace** | Overwrites the dataset with the latest data from the source | ![20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_1 (1).png](https://mammoth.io/docs/images/20261008_124523_20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_11.webp) ### Step 3: Configure the schedule In the **Set Schedule** step (also referred to as Schedule), choose between two cards: **On schedule** (you can still run it manually at any time) or **Manual only**, which has no automatic runs — the automation then runs only when you trigger it manually or via the API. For **On schedule**, set **Repeat every** (a frequency unit and a number) and, under **More options**, the start and end of the schedule. ![20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_2 (1).png](https://mammoth.io/docs/images/20261008_124551_20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_21.webp) The frequency units, the intervals available on each plan, and the start and end options are the same for every automation type. See [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/) for the full reference. If you change none of the schedule options, the automation starts immediately and runs indefinitely. ### Step 4: Review and save On the **Review & save** step, enter a descriptive name and optional description, review the automation summary (datasets, schedule, and type), and click **Save automation**. ![20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_3 (1).png](https://mammoth.io/docs/images/20261008_124627_20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_31.webp) ## After creation The automation appears in the list with status **Active**. The **Details** column shows a summary like: *"Dataset 'products' will be refreshed every 3 hours."* The automation will execute at each interval. You can also trigger it manually at any time using **Run now** from the detail panel or three-dot menu. ## Viewing refresh status Click the automation row to open the detail panel. The **Automation Summary** section shows: - **Refresh method**—The schedule (e.g., "On schedule, every 3 hours") - **Next run**—When the next refresh is scheduled - **Ends**—End date, or "Never" - **Dataset**—The datasets being refreshed ## Editing a Dataset Refresh automation Open the automation from the Automations list (or from a dataset's preview panel **Automation** section) and choose **Edit** from the three-dot options menu. This opens the automation **edit modal** directly over whatever page you're currently on — there is no separate edit page to navigate to. ![20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_4 (1).png](https://mammoth.io/docs/images/20261008_124659_20261008_050649_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-3_41.webp) ### Status and quick actions At the top of the modal, a banner shows the automation's current status: - **Active** — the automation is running on schedule. You can click **Run Now** to trigger an immediate run, or **Suspend** to pause scheduled runs. - **Suspended** — scheduled runs are paused. Click **Resume** to reactivate the automation. - **Error** — the automation has an error. ### Making changes In the **DETAILS** section you can: - Rename the automation - Update its description In the **CONFIGURATION** section you can: - Click **Schedule** → **Edit** to expand the schedule editor and change the frequency, interval, weekday selection, and start/end dates - Add datasets to the refresh list via **Add more**, or remove a dataset from the list - When multiple datasets are selected, drag to reorder them and choose whether they refresh **In parallel** or **In a sequence** - Adjust each dataset's update method inline - The automation **Type** is shown for reference but cannot be changed Click **Save changes** to apply your edits, or **Delete Automation** to move the automation to Trash. Changes take effect from the next scheduled run. ## Troubleshooting ### Status shows Error **Cause:** The source connection expired or changed, or the source data structure changed in a way that is incompatible with the existing schema. **Fix:** Re-authenticate the connection in your Data Library. If the structure changed, check the source columns against the dataset schema. ### Automation runs but data doesn't change **Cause:** The source has not updated since the last refresh. This is expected: the automation pulls whatever the source currently contains. **Fix:** Check the source for new data, or use **Run now** after the source updates. --- # Automations URL: https://mammoth.io/docs/learn/automations/ · Updated: 2026-11-02 Overview of Mammoth automations (Dataset Refresh, Data Consolidation, File Collection, Messaging), Auto-sync, pipeline governance, and Monitor. This section is for anyone who wants data work in Mammoth to run without manual steps: refreshing cloud datasets, processing uploaded files, emailing reports, re-running pipelines when data changes, and gating data on quality checks or approvals. Mammoth offers three ways to automate, each at a different layer of the product. Start with [Automation types](https://mammoth.io/docs/learn/automations/automation-types/) if you want to schedule a recurring job, or read on to choose between the three. ## The three automation levers | Lever | What it automates | Where it lives | Trigger | | --- | --- | --- | --- | | **Automations** | Recurring data operations—refresh a cloud dataset, consolidate uploaded files, collect files from cloud storage, send a scheduled report | **Automations** tab in the Data Library | Schedule, manual run, or file event | | **Auto-sync** | Automatic re-execution of pipeline steps and exports when upstream data changes | Per-view and per-export settings | Data change event | | **Pipeline governance** | Data quality gates and human checkpoints within pipelines | Pipeline task settings | Manual approval or data condition | These three levers work at different levels. Automations are project-level scheduling. Auto-sync is view-level and export-level reactivity. Pipeline governance is step-level control. You can combine them, as the [workflow patterns](#common-workflow-patterns) below show. ## Automations Automations handle **scheduled and event-driven data operations**—the recurring jobs that keep your data flowing without manual intervention, such as keeping your datasets fresh, processing incoming files, and sending your team scheduled reports. You create and manage automations from the **Automations** tab in the Data Library of any project, or from the **Automations** section of a dataset's side panel. ![20261008_033427_automation-tab-in-data-library.png](https://mammoth.io/docs/images/20261008_123258_20261008_033427_automation-tab-in-data-library.webp) There are four automation types: | Type | What it does | Trigger | | --- | --- | --- | | **Dataset Refresh** | Re-fetches data from a cloud source (Google Sheets, Salesforce, databases) | Schedule (minutely to yearly, depending on your plan) or manual | | **Data Consolidation** | Automatically appends or replaces data in a destination dataset when new files are uploaded to a source folder | File upload event | | **File Collection** | Automatically pulls files in from external cloud storage sources into a destination folder in Mammoth. Available on plans that include it | Schedule or manual | | **Messaging** | Sends scheduled emails with attached Dataset Views to a defined recipient list | Schedule (hourly to yearly, depending on your plan) | Use an automation when you have a repeating data task that currently requires manual steps: - You connect to a third-party data source (Google Sheets, Salesforce, and so on) and need it refreshed daily → use **Dataset Refresh** - Your team uploads CSV exports to a folder each morning and you want them merged into one master dataset → use **Data Consolidation** - You want files from an external cloud source collected into a Mammoth folder → use **File Collection** - Stakeholders need a weekly email with the latest sales numbers attached → use **Messaging** Once created, each automation appears as a row in the list with its name, a one-line summary, type, and status (**Active**, **Suspended**, or **Error**). Click a row to open the detail panel, where you can view the last run result, run it manually, edit it, or delete it. Pages in this section: - [Automation types](https://mammoth.io/docs/learn/automations/automation-types/): compare Dataset Refresh, Data Consolidation, File Collection, and Messaging - [Creating an automation](https://mammoth.io/docs/learn/automations/creating-an-automation/): steps shared by every automation type - [Dataset Refresh](https://mammoth.io/docs/learn/automations/dataset-refresh/): re-fetch data for cloud-connected datasets on a schedule - [Data Consolidation](https://mammoth.io/docs/learn/automations/data-consolidation/): merge files uploaded to a folder into a dataset - [Messaging](https://mammoth.io/docs/learn/automations/messaging/): email Dataset Views as CSV attachments on a schedule - [Managing automations](https://mammoth.io/docs/learn/automations/managing-automations/): statuses, pause, run now, edit, delete - [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/): frequency, start and end options, and ordering - [Triggers](https://mammoth.io/docs/learn/automations/triggers/): schedules, manual runs, file uploads, webhooks, and API calls ## Auto-sync Auto-sync controls whether a pipeline step or export **automatically re-runs when its upstream data changes**. Mammoth has two independent Auto-sync layers: ### View Auto-sync Each pipeline view (a step in your data transformation) has an Auto-sync toggle. When enabled, the view re-processes automatically whenever the source data changes—a new file lands, a refresh runs, a manual edit is saved. When disabled, the view "freezes"—changes flow up to that point but stop. This is useful when you want to review data before it propagates downstream. ### Export Auto-sync Each export (a connection from a view to an external destination—database, SFTP, live link) also has its own Auto-sync toggle. When enabled, the export fires automatically whenever the view it's connected to produces new output. When disabled, you control exactly when data leaves Mammoth—useful for staging environments, approval workflows, or rate-limited destinations. > **Paused tab:** Steps and exports with Auto-sync turned off are listed in [Monitor's Paused tab](https://mammoth.io/docs/learn/monitor/#paused), where you can turn Auto-sync back on. ## Pipeline governance Pipeline governance gives you **human checkpoints and data quality gates** within a pipeline—so data only advances when it meets your standards or has been reviewed by the right person. ### Data check tasks A Data Check task validates the data at a pipeline step against a set of conditions you define—row counts, column values, null thresholds, or custom expressions. If the check fails, the pipeline halts at that step and flags the run for review. Use Data Check tasks when you need to guarantee data quality before downstream steps execute (for example: before an export fires, or before a report is sent to stakeholders). ### Checkpoint tasks A Checkpoint task pauses pipeline execution at a specific step and requires a designated user to manually approve it before the pipeline continues. Use Checkpoint tasks for compliance workflows, staged rollouts, or any scenario where a human needs to sign off on data before it advances. > Pipeline governance tasks appear in the **Needs Attention** tab of [Monitor](https://mammoth.io/docs/learn/monitor/) when they require action—your inbox for checkpoint approvals and failed data checks. ## Monitor **Monitor** gives you real-time visibility into everything actively happening in your workspace across all three automation layers—items needing action, running pipelines and automations, tasks with Auto-sync disabled, and a full activity log. Click **Monitor** in the left sidebar (available from any project view). The Monitor modal has four tabs: | Tab | What it shows | | --- | --- | | **Needs Attention** | Pipeline errors, pending data updates, pending pipelines, checkpoint approvals, and failed data checks | | **Running** | All pipeline views, tasks, and automations currently executing or queued—with status badges and task counters | | **Paused** | Every pipeline step, export, or dependency where Auto-sync has been disabled—re-enable per row | | **Activity Log** | Chronological audit trail of all workspace events, filterable by project or workspace scope | Monitor refreshes every 5 seconds. Tab counts update automatically. → [**Monitor—full reference**](https://mammoth.io/docs/learn/monitor/) ## Which lever should I use? Use this decision tree to choose the right automation lever for your scenario: ```plaintext I want to see what's running right now across my workspace └─→ Open MONITOR (left sidebar) ``` ```plaintext My data source needs to stay current automatically └─→ It's a cloud-connected dataset (Google Sheets, Salesforce, etc.) └─→ Use an AUTOMATION → Dataset Refresh ``` ```plaintext My team uploads files and they need to be processed automatically └─→ Use an AUTOMATION → Data Consolidation ``` ```plaintext I need files from external cloud storage collected into Mammoth └─→ Use an AUTOMATION → File Collection ``` ```plaintext I need to send a scheduled email report with data attached └─→ Use an AUTOMATION → Messaging ``` ```plaintext I want pipeline steps to re-run automatically when data changes └─→ Use AUTO-SYNC (View Auto-sync on each pipeline step) ``` ```plaintext I want exports to fire automatically when a view updates └─→ Use AUTO-SYNC (Export Auto-sync on each export) ``` ```plaintext I need to validate data quality before it moves downstream └─→ Use PIPELINE GOVERNANCE → Data Check task ``` ```plaintext I need a human to approve data before it advances in the pipeline └─→ Use PIPELINE GOVERNANCE → Checkpoint task ``` ## Common workflow patterns ### Keep cloud datasets fresh and trigger downstream pipelines 1. Set up **Dataset Refresh** automations for each cloud-connected dataset 2. Enable **View Auto-sync** on all downstream pipeline views 3. Enable **Export Auto-sync** on any exports to external destinations 4. Monitor health in **Monitor → Running** ### Process files as they arrive and notify stakeholders 1. Set up a **Data Consolidation** automation to append files as they're uploaded 2. Enable **View Auto-sync** on the pipeline views that transform the consolidated data 3. Set up a **Messaging** automation to send a daily summary email 4. Add a **Data Check** task before the final export to catch schema issues ### Add human review before data ships 1. Set up the data pipeline with **View Auto-sync** enabled on each step 2. Add a **Data Check** task at the point where data must meet quality thresholds 3. Add a **Checkpoint** task requiring approval before the final export 4. Enable **Export Auto-sync**—the export fires only after the Checkpoint is approved 5. Reviewers see pending checkpoints in **Monitor → Needs Attention** ## Getting started with automations If you're new to automations in Mammoth, work through these pages in order: 1. [**Automation types**](https://mammoth.io/docs/learn/automations/automation-types/)—understand what each type does before creating one 2. [**Creating an automation**](https://mammoth.io/docs/learn/automations/creating-an-automation/)—step-by-step walkthrough of the create wizard, launched from a "New Automation" entry point (no separate "Automation" page required) 3. [**Managing automations**](https://mammoth.io/docs/learn/automations/managing-automations/)—open the edit modal to pause, resume, run manually, edit configuration, or delete 4. [**Monitor**](https://mammoth.io/docs/learn/monitor/)—watch everything in real time ### What changed in how automations are created and edited Automations are no longer created or edited on dedicated full-page forms. Instead: - **Creating** an automation opens a **Create Automation modal**—a multi-step wizard that walks you through: picking an automation type, filling in type-specific steps (such as selecting a source/destination or setting a schedule), and a final review step where you name the automation and confirm its settings before saving. - **Editing** an automation opens an **Edit Automation modal**—a single screen with collapsible configuration sections for that automation's settings, plus a status banner showing whether the automation is active, suspended, or has an error, with inline **Suspend**, **Resume** (when suspended), and **Run Now** actions you can trigger without leaving the modal. Deleting an automation is also done from this modal, moving it to trash. ![20261007_190206_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-1_0 (1).png](https://mammoth.io/docs/images/20261008_123321_20261007_190206_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-1_01.webp) ![20261007_190206_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-1_1 (1).png](https://mammoth.io/docs/images/20261008_123344_20261007_190206_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-1_11.webp) --- # Managing automations URL: https://mammoth.io/docs/learn/automations/managing-automations/ · Updated: 2026-11-02 View automation details, suspend and resume, use Run now, edit, and delete automations, and read the Active, Suspended, and Error statuses. After you create automations, you manage them from the **Automations** tab in the Data Library. This page covers how to view details, change status, run manually, edit, and delete. ## The automation list The Automations tab shows all automations in the current project in a table. ![20261008_061506_automationlist1.png](https://mammoth.io/docs/images/20261008_125525_20261008_061506_automationlist1.webp) **Columns:** | Column | What it shows | | --- | --- | | **Name** | Automation name and description (if set) | | **Details** | One-line summary of what the automation does | | **Type** | Dataset Refresh, Data Consolidation, File Collection, or Messaging | | **Status** | Active, Suspended, or Error | Click any row to open the **detail panel** on the right. ## The detail panel Clicking an automation row slides open the detail panel on the right side of the screen. It shows a full summary and gives you access to all management actions. ![20261008_061524_automationlist2.png](https://mammoth.io/docs/images/20261008_125653_20261008_061524_automationlist2.webp) The detail panel has two main sections: ### Overview ![20261008_061534_automationlist3.png](https://mammoth.io/docs/images/20261008_125716_20261008_061534_automationlist3.webp) | Field | Description | | --- | --- | | **Status** | Toggle to activate or suspend the automation | | **Last run result** | Whether the most recent execution succeeded or failed | | **Last modified** | When the automation was last edited | | **Last updated by** | Who last edited it | | **Created by** | Who created it | | **Date of creation** | When it was created | ### Automation summary Shows a type-specific summary of the automation configuration—schedule, datasets, recipients, etc. ## Pausing and resuming You can suspend (pause) an automation to stop it from running without deleting it. **To suspend:** - Open the detail panel → toggle **Status** off, or - Click the three-dot menu (⋯) on the row → toggle **Automation Status** off The status changes to **Suspended**. No further executions occur until you resume. **To resume:** - Toggle **Status** back on in the detail panel, or - Toggle **Automation Status** back on in the three-dot menu When you resume, the automation status returns to **Active** and re-queues for its next scheduled execution. ## Running manually (run now) You can trigger any **Active** automation immediately without waiting for the scheduled time. **From the detail panel:** Click **Run now**. **From the three-dot menu:** Click ⋯ on the automation row → **Run now**. ![20261008_061602_automationlist4.png](https://mammoth.io/docs/images/20261008_125751_20261008_061602_automationlist4.webp) > **Note:** Run now is only available when the automation status is **Active**. Suspended automations must be resumed before they can be run manually. ## Editing an automation Open the detail panel and click **Edit**, or use the three-dot menu → **Edit**. The edit form is the same as the creation form for that type. You can change: - **Dataset Refresh**: datasets, schedule, start/end dates, name, description - **Data Consolidation**: source folder, destination dataset, name, description - **Messaging**: schedule, recipients, subject, message body, attached views, name, description - **File Collection**: sources, destination folder, schedule, name, description Save your changes to apply them. ## Deleting an automation **From the detail panel:** Click **Delete** (shown in red). **From the three-dot menu:** Click ⋯ → **Delete**. A confirmation modal appears. Confirming moves the automation to Trash. You can restore it from the Trash section until it is deleted automatically. ## Automation statuses | Status | Icon | Meaning | | --- | --- | --- | | **Active** | Green check | Running normally on its configured schedule or trigger | | **Suspended** | Grey pause | Manually paused—no runs will occur | | **Error** | Red warning | The automation has an error—check Last run result for details | **When an automation shows Error:** 1. Open the detail panel. 2. Check **Last run result**—it shows the specific error. 3. Common causes: - A referenced dataset or folder was deleted - A cloud connection expired (Dataset Refresh) - A schema mismatch (Data Consolidation) - A referenced view was deleted (Messaging) 4. Edit the automation to fix the underlying issue, then use **Run now** to verify the fix. --- # Messaging URL: https://mammoth.io/docs/learn/automations/messaging/ · Updated: 2026-11-02 Create a Messaging automation that emails Dataset Views as CSV attachments to a recipient list on a schedule, with a 100,000-row attachment limit. Messaging sends scheduled email notifications with Dataset Views attached as CSV files. Set it up once, and your stakeholders receive fresh data in their inbox at every interval you configure. ## Before you start - The Dataset Views you want to attach must already exist in your project. - You need the email addresses of all intended recipients. ## Creating a messaging automation ### Step 1: Open the creation modal From the Data Library, click **New Automation** (for example, in the Data Hub header, a folder's empty state, or a resource's context menu), or click the equivalent action from the preview panel's **Automation** section. A modal opens showing the list of automation types to choose from; select **Messaging**. ![20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_0 (1).png](https://mammoth.io/docs/images/20261008_125017_20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_01.webp) The modal then walks through a short wizard for Messaging: **Write message** → **Set trigger** → **Review & save**. A step indicator at the top of the modal shows your progress and lets you jump back to a previous step. ![20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_1 (1).png](https://mammoth.io/docs/images/20261008_125047_20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_11.webp) ### Step 2: Write the message On the **Write message** step, fill in the following: | Field | Required | Description | | --- | --- | --- | | **Type** | Yes | Message type (currently only **Email**) | | **Send to** | Yes | Enter recipient email addresses (one or more) | | **Subject** | Yes | The email subject line | | **Message** | No | Body text of the email | | **Attach Dataset Views** | Yes | Select one or more Dataset Views to export and attach | **Attaching Dataset Views:**\ Click **select views to attach** and choose the views you want included. Each view is exported as a CSV file and attached to the email. > **Row limit:** The attached views can total at most **100,000 rows** (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)). If the combined row count is higher, Mammoth shows an error and you can't attach them. Choose views with fewer rows, or filter large views into smaller ones. ![20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_2 (1).png](https://mammoth.io/docs/images/20261008_125238_20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_21.webp) Click **Write message** (or the next step's label) to continue to the trigger step. ### Step 3: Set the trigger On the **Set trigger** step, set the schedule. Messaging sends on a recurring time-based schedule, with no manual-only option. **Schedule options:** | Setting | Description | | --- | --- | | **Repeat every** | Interval number + unit (hour/day/week/month/year; the shortest unit depends on your plan) | | **Start** | now, or on a date (under the expandable additional options) | | **End** | never, or on a date (under the expandable additional options) | For weekly schedules, you also select which days of the week to send. ![20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_3 (1).png](https://mammoth.io/docs/images/20261008_125312_20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_31.webp) ### Step 4: Review and save On the **Review & save** step, enter a name for the automation and an optional description, review the summary of your configuration (type, recipients, subject, attached views, schedule), and click **Save automation**. Before saving, you can click **Send test email** to send an immediate test message to the configured recipients. This verifies: - Recipients receive the email - Attachments are correctly generated - Subject and body content look right The test email sends even if the automation hasn't been saved yet. ![20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_4 (1).png](https://mammoth.io/docs/images/20261008_125345_20261008_052601_draft_01_learn_automation-creation-editing-moved-from-full-page-routes-to-in-place-modals-with-live-status-and-quick-actions-4_41.webp) Once saved, the automation appears with its live status, and you can reopen it at any time to edit its message, recipients, schedule, or name/description, or to suspend, resume, run it manually, or delete it, from the same modal-based flow. ## After creation The automation appears in the list with status **Active**. The **Details** column shows a summary like: *"[priya@mammoth.io](mailto:priya@mammoth.io) will receive an email message with 1 attached view every 3 hours."* The first email sends at the next scheduled interval (or immediately, if you chose "Start now"). ## Managing recipients Recipients can unsubscribe from emails by clicking the unsubscribe link in the email footer. A recipient who unsubscribes is removed from future sends for that automation. To update the recipient list, open the automation and click **Edit**. ## Monitoring messaging runs Click the automation row to open the detail panel. The **Automation Summary** shows: - The schedule (e.g., "On schedule, every 3 hours") - The next scheduled send time - The end date (or "Never") - The recipient(s) The **Last run result** in the Overview section shows whether the last email was sent successfully. ## Troubleshooting ### Emails are not arriving **Cause:** Recipients unsubscribed, the emails went to spam, or an address is wrong. **Fix:** Check that recipients have not unsubscribed or filtered your emails to spam. Verify the addresses by opening the automation and clicking **Edit**. ### Status shows Error **Cause:** A Dataset View referenced in the automation was deleted. **Fix:** Open the detail panel and check **Last run result** for the specific error. Edit the automation and select a new view. ### You cannot attach a view **Cause:** The attached views total more than 100,000 rows. **Fix:** Filter the views to reduce the row count, or attach fewer views. --- # Scheduling URL: https://mammoth.io/docs/learn/automations/scheduling/ · Updated: 2026-11-02 Configure when automations run, with minute, hourly, daily, weekly, monthly, and yearly frequencies, start and end dates, and multi-dataset ordering. Scheduling determines when your automations execute automatically—the timing, frequency, and duration that control your automated workflows. Set it up once and Mammoth handles the execution reliably without manual intervention. **Can I schedule every hour?** No self-serve plan offers a 1-hour interval. The shortest interval on the Pro plan is every 3 hours. Team runs daily or less often, Starter runs weekly or less often, and Free has no scheduled runs. See [Shortest interval by plan](#shortest-interval-by-plan). ## Scheduling vs triggers **Scheduling** controls the *timing* of automated execution: - Every 3 hours - Weekly on Mondays at 9:00 AM - Monthly on the 1st **Triggers** control *what initiates* execution: a schedule, a manual **Run now**, or a file upload. See [Triggers](https://mammoth.io/docs/learn/automations/triggers/) for every trigger type and which automation types use each one. --- ## Where to configure scheduling Scheduling is configured in the **New automation** window, which walks you through the automation's steps, and in the **Schedule** row when you edit an existing automation (click **Edit schedule**): - **Dataset Refresh**—In the **Set Schedule** step, choose **On schedule** (you can still run it manually at any time) or **Manual only** (no automatic runs; it runs only when you trigger it manually or via the API). Click **More options** to expand the start and end settings. Saving a new automation also runs it once right away if it has no recurring schedule (**Manual only**) or if its start is **now**. - **File Collection**—In the **Set Schedule** step, choose **On schedule** or **Manual only**, with the same frequency options as Dataset Refresh. - **Messaging**—In the **Set trigger** step, set the schedule. Messaging always runs on a schedule, so there is no **Manual only** option. - **Data Consolidation**—Has no schedule step. It runs when new files are added to its source folder. See [Triggers](https://mammoth.io/docs/learn/automations/triggers/). ![20261008_071238_data-refresh1.png](https://mammoth.io/docs/images/20261008_125918_20261008_071238_data-refresh1.webp) ![20261008_071258_set-trigger1.png](https://mammoth.io/docs/images/20261008_125946_20261008_071258_set-trigger1.webp) ## Frequency options Set how often the automation runs by choosing a frequency unit (Year, Month, Week, Day, Hour, or Minute), then the number to **Repeat every**. ### Available intervals | Unit | Available values | | --- | --- | | **Minute** | 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 (not available for Messaging) | | **Hour** | 1 through 23 (3 through 23 on plans whose shortest interval is hourly) | | **Day** | 1 through 6 | | **Week** | 1 through 3 | | **Month** | The day of the month, 1st through 31st | | **Year** | 1 through 5 | ### Shortest interval by plan Your plan sets the finest unit available. The scheduler hides finer units. When the finest unit is Hour, the interval must be 3 hours or more. | Plan | Finest unit | Shortest interval | | --- | --- | --- | | Free | None | Scheduled runs are not available. Run automations manually. | | Starter | Week | Every 1 week | | Team | Day | Every 1 day | | Pro | Hour | Every 3 hours | Enterprise and older plans are set by contract, so ask your account team for the finest unit. Minute is available only on a plan whose finest unit is Minute, and only for Dataset Refresh and File Collection, not Messaging. Limits for every plan are on [Limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/#schedules). ### Weekly schedules When **Week** is selected as the unit, a row of weekday buttons appears (one letter per day; hover for the full name). Select one or more days of the week on which the automation should run. At least one day is required, and the current weekday is selected by default. **Example:** Weekly on Monday, Wednesday, and Friday at 9:00 AM. --- ## Schedule options (start and end) Click **More options** to configure when the schedule begins and ends (the link changes to **Fewer options** while the settings are open). A one-line summary beside the link shows the result, such as "Starts now, runs continuously". ### Start | Option | Behavior | | --- | --- | | **now** | The automation starts immediately after creation, then runs on its configured interval | | **on a date** | Choose a specific date and time for the first run | ### End | Option | Behavior | | --- | --- | | **never** | The automation runs indefinitely | | **on a date** | Choose an end date after which no further runs occur | If left at defaults (**now** / **never**), the automation starts immediately and runs without an end date. An end date cannot be earlier than the start. Dates and times you pick are in your browser's local time zone. Mammoth stores them in UTC and shows next and last run times back in your local time. --- ## Common scheduling patterns ### Daily operations dashboard **Need:** Operations team needs production metrics every morning. **Config:** Dataset Refresh, Daily every 1 day at 6:00 AM. Pipeline runs automatically after data lands. ### Weekly executive reporting **Need:** Leadership receives portfolio performance every Monday morning. **Config:** Messaging, Weekly on Monday. Attach the executive summary Dataset View. Delivers to inbox before the Monday meeting. ### Month-end financial close **Need:** Finance team needs fresh data on the 1st of each month. **Config:** Dataset Refresh, Monthly on the 1st. Set the start time early enough that data is ready before the finance team begins work. ## Scheduling best practices **Stagger concurrent automations:** - Avoid: all refreshes at 6:00 AM (system contention) - Prefer: stagger at 5:30, 6:00, and 6:30 AM **Sequence dependent processes:** If Pipeline B depends on Dataset Refresh A, schedule B at least 15 minutes after A's typical completion time: ```plaintext 5:00 AM — Dataset Refresh 5:15 AM — Pipeline execution 6:00 AM — Messaging delivery ``` **Run non-urgent automations off-hours** to avoid impacting interactive users during business hours. **Name automations with timing context:** - Prefer: `Daily Sales Report - 6am` or `Weekly Executive Summary - Mon 8am` - Avoid: `Dataset Refresh 1` ## Monitoring scheduled executions Select an automation to open its detail panel. The **Summary** shows its schedule and recent activity: - **Next run**—when the next execution is scheduled - **Last run**—when the most recent execution happened - **Ends**—end date, or "Never" The **Overview** shows the **Status** (Active or Suspended) with a toggle to suspend or resume the automation, plus the **Last run result**: Success, or the reason the last run failed. Open an automation to edit it and its title bar shows an **ACTIVE**, **SUSPENDED** or **ERROR** badge. While it is active, **Run now** and **Suspend** are available there. While it is suspended, **Resume** is available instead. A suspended automation does not run on its schedule and cannot be run manually until you resume it. The Activity Log records changes made to automations, such as edits. ## Multi-dataset priority When a Dataset Refresh automation includes multiple datasets, choose how they run: **In parallel** refreshes all datasets at once, and **In a sequence** refreshes them one after another in the numbered order. Drag datasets to reorder them. **Example—financial reporting sequence:** 1. Transaction data—refreshes first 2. Customer master—depends on transactions 3. Product hierarchy—reference data 4. GL mappings—accounting integration Running in a sequence keeps dependent datasets in the right order. ## Troubleshooting ### Automation doesn't run at the expected time **Cause:** The automation is suspended, or the data source's Live Connection is no longer authenticated. **Fix:** - Confirm the automation status is **Active** (not Suspended) - Confirm your plan still allows the schedule's frequency. Mammoth checks the plan each time a schedule fires, so a schedule that is finer than your plan allows (for example after a downgrade) stops running until the plan allows it again - Check the automation's status and its **Last run** time - Verify the data source's Live Connection is authenticated ### Automation run times vary **Cause:** Multiple heavy automations are competing for resources. **Fix:** Stagger their schedules. ### Automation fails after a schedule change **Cause:** Schedule changes take effect from the next scheduled run, so the next run uses the new configuration. **Fix:** Use **Run now** to test the new configuration immediately. --- # Triggers URL: https://mammoth.io/docs/learn/automations/triggers/ · Updated: 2026-11-02 Configure when automations execute using schedules, manual runs, file uploads, API calls, and webhook data pushes Triggers determine when your automations execute. Mammoth supports several trigger mechanisms—from time-based schedules to on-demand runs, file uploads, external API calls, and a webhook data ingestion path for pushing data from external systems. ## Trigger types overview | Trigger | Description | Applies to | | --- | --- | --- | | **Schedule-based** | Time-based recurring execution | Dataset Refresh, File Collection, Messaging | | **Manual** | On-demand via **Run now** | All automation types | | **File upload** | Runs when files are uploaded to the source folder | Data Consolidation | | **Webhook (data push)** | External systems push data via HTTP | Webhook datasets | | **API trigger** | External systems trigger automations programmatically | Existing automations | ## Schedule-based triggers The most common trigger—automations run at a configured time interval. See the [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/) page for the complete configuration reference. **Common patterns:** | Pattern | Configuration | | --- | --- | | Daily operations | Every 1 Day at 6:00 AM | | Weekly reporting | Every 1 Week on Monday at 8:00 AM | | Monthly close | Monthly on the 1st at 11:45 PM | ## Manual triggers Run any **Active** automation immediately without waiting for the scheduled time, from the detail panel or the three-dot menu. See [Run now](https://mammoth.io/docs/learn/automations/managing-automations/#running-manually-run-now) for the steps. Run now is only available while the automation is **Active**; a suspended automation must be resumed first. **When to use manual triggers:** - Testing a new automation before enabling its schedule - Re-running after resolving a failure - Ad-hoc reporting when stakeholders need data immediately - Verifying a configuration change worked correctly A Dataset Refresh set to **Manual only** has no automatic runs at all; it runs only when you trigger it manually or through the API. ## File upload triggers **Data Consolidation** automations execute automatically when new files are uploaded to their configured source folder. No manual trigger or schedule needed—the upload event itself kicks off the consolidation. See [Data Consolidation](https://mammoth.io/docs/learn/automations/data-consolidation/) for setup details. ## Webhook data ingestion Webhooks let external systems push data directly into a Mammoth dataset over HTTP. Instead of uploading files manually, your application sends a payload to a unique URL and Mammoth ingests it automatically. ### Creating a webhook dataset 1. In the Data Library, click **+ New Dataset** 2. In the modal, select **Webhooks** from the left sidebar 3. Configure the two fields: | Field | Description | | --- | --- | | **New webhook name** | Name for the dataset receiving incoming data | | **Dataset mode** | How incoming payloads are applied to the dataset | **Dataset mode options:** | Mode | Use when | | --- | --- | | **Replace the older data** | External system sends full snapshots each time (e.g., complete CRM export) | | **Combine with older data** | External system sends incremental records (e.g., new transactions since last send) | 4. Click **Create new dataset** Mammoth generates a unique **webhook URL** for this dataset. By default, any request to that URL is accepted—no secret required. To require authentication, enable the **Secure header** toggle in the dataset's Settings panel. Mammoth generates a secret and every request must then include it as an `X-SECRET` header: ```plaintext X-SECRET: ``` Requests missing the header, or sending the wrong value, are rejected with an "Invalid webhook secret" error, and their data is not ingested. > **Keep your webhook secret secure.** Anyone with the URL and secret can push data into this dataset. ### Sending data to the webhook Your external system sends an HTTP `POST` to the webhook URL with the data payload (JSON or form data), and the `X-SECRET` header if the secure header is enabled. Mammoth validates the request, stages the incoming data, and then adds it to the dataset. Incoming data is not available instantly. ## API triggers External systems can trigger Mammoth automations programmatically via the Mammoth API. This enables event-driven architectures where upstream processes notify Mammoth to run after completing their own work. **Authentication:** API credentials are required. See the [API reference](https://mammoth.io/docs/build/) for authentication details. **Common integration patterns:** | Pattern | Example | | --- | --- | | Upstream completion | ERP finishes nightly batch → API call → Mammoth refreshes dashboards | | Event-driven | Payment system processes transactions → webhook → dataset updated with the new records | | External workflow tool | An Apache Airflow DAG triggers a Mammoth automation as one step | The API applies per-minute rate limits. Retry rate-limited calls after a short delay instead of sending them repeatedly. ## Choosing the right trigger | Use this trigger | When | | --- | --- | | **Schedule-based** | Predictable timing, independent of other systems | | **Manual** | Testing, handling failures, ad-hoc reporting | | **File upload** | Data arrives as files from multiple sources | | **Webhook** | External systems push data; you don't control when it arrives | | **API** | Upstream processes complete at variable times; you need to be notified | ## Troubleshooting ### Automation doesn't run at the scheduled time See [Scheduling troubleshooting](https://mammoth.io/docs/learn/automations/scheduling/#troubleshooting). ### Run now is grayed out **Cause:** The automation is **Suspended**. **Fix:** Toggle it back to **Active** in the detail panel, then use **Run now**. ### Webhook data doesn't appear in the dataset **Cause:** The webhook URL or secret is wrong, or the data has not been added yet. Incoming webhook data is not added instantly. **Fix:** - Confirm the webhook URL is correct and the secret is sent in the `X-SECRET` header - Wait a few minutes and refresh the dataset ### API trigger returns 401 Unauthorized **Cause:** The API credentials are missing, expired, or lack permission for the target automation. **Fix:** - Verify the API key is valid and not expired - Check that you send the key the way the [API reference](https://mammoth.io/docs/build/) describes - Confirm the API key has permissions for the target automation --- # Azure Blob Storage connector URL: https://mammoth.io/docs/learn/connectors/azure-blob-storage-connector/ · Updated: 2026-11-02 Connect Mammoth to Azure Blob Storage with Azure app credentials (Tenant ID, Client ID, Client Secret) and import files from a storage account. The Azure Blob Storage connector imports files from a **Microsoft Azure Storage account** into Mammoth as datasets. Authentication uses Azure app credentials (Tenant ID, Client ID, Client Secret) tied to a storage account—not a per-user OAuth sign-in. ## Before you start You need an **Azure Active Directory app** registered with access to the target storage account. This is a one-time setup, typically done by an Azure admin. ### Register the Azure AD app 1. Go to [Azure Portal](https://portal.azure.com) → **Azure Active Directory → App registrations** 2. Click **New registration**—name it (e.g., `Mammoth Blob Storage`) and click **Register** 3. Copy the **Application (client) ID**—this is your **Client ID** 4. Copy the **Directory (tenant) ID**—this is your **Tenant ID** 5. Go to **Certificates & secrets → New client secret**, add a description, set an expiry, and click **Add** 6. Copy the secret **Value** immediately (it won't be shown again)—this is your **Client Secret** 7. On your storage account, go to **Access Control (IAM) → Add role assignment** and grant the app the **Storage Blob Data Reader** role (or higher, if you also need export) You'll also need the **Storage account name** you want Mammoth to read from. ## Step 1: Select the Azure Blob Storage connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Azure Blob Storage** or find it in the **Cloud Storage** category 4. Click the **Azure Blob Storage** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. | Field | Description | Example | | --- | --- | --- | | **Storage Account Name** | The Azure Storage account to connect to | `mycompanystorage` | | **Tenant ID** | Azure AD Directory (tenant) ID | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | | **Client ID** | Azure AD Application (client) ID | `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` | | **Client Secret** | The app secret value you created | — | All four fields are required. Click **Connect** once they're filled in—there's no OAuth sign-in step, since the connector authenticates directly with the app credentials above. If validation fails, the error message appears at the bottom of the form. ## Step 3: Find and select your Azure Blob Storage file After connecting, select the connection under **Existing Connections**. Mammoth shows the containers and blobs in the storage account as a file tree. - Click a container to expand it and browse its contents - Check the box next to a file to select it, or check a folder/prefix to include everything inside it - You can select more than one file in a single connection ### Supported Azure Blob Storage file types `.txt` · `.csv` · `.tsv` · `.psv` · `.xls` · `.xlsx` · `.xml` · `.zip` · `.bz2` · `.gz` · `.tar` · `.7z` ## Step 4: Create the Azure Blob Storage dataset Click **Create new dataset**. Mammoth does not ask you to choose an update method for this connector. To keep the dataset in sync as the source file changes, set up a **Dataset Refresh** automation. ## Troubleshoot Azure Blob Storage connections ### Authentication fails - Check all four values (Storage Account Name, Tenant ID, Client ID, Client Secret) are copied correctly - Confirm the app's role assignment on the storage account has propagated (this can take a few minutes after granting access) ### Client secret expired - Client secrets expire based on the duration you set during creation—generate a new secret in Azure Portal and update the connection in Mammoth ### No containers or files appear - Confirm the app has at least the **Storage Blob Data Reader** role on the storage account, not just on a single container - Confirm the file is one of the supported formats listed above --- # Google BigQuery connector URL: https://mammoth.io/docs/learn/connectors/bigquery/ · Updated: 2026-11-02 Connect Mammoth to Google BigQuery with a service account JSON key: required roles, how to connect, and how to import a table or query as a dataset. The Google BigQuery connector imports data from your BigQuery data warehouse into Mammoth as a dataset. Authentication uses a Google Cloud service account key file—no OAuth sign-in is required. ## Before you start You need: - A Google Cloud project with BigQuery enabled - A service account with the **BigQuery Data Viewer** role (or equivalent) - The service account's JSON key file downloaded to your computer ### Create a BigQuery service account 1. In the [Google Cloud Console](https://console.cloud.google.com), go to **IAM & Admin → Service Accounts** 2. Click **Create Service Account** 3. Give it a name (e.g., `mammoth-bigquery`) 4. Grant the role **BigQuery Data Viewer** (for read access) and **BigQuery Job User** (to run queries) 5. Click **Done** 6. Open the service account, go to **Keys**, click **Add Key → Create new key**, and select **JSON** 7. Save the downloaded JSON file—you'll upload it to Mammoth in the next step ## Step 1: Select the BigQuery connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **BigQuery** 4. Click the **Google BigQuery** tile ## Step 2: Create a connection Click **New Connection**. BigQuery uses a service account file rather than username/password. ![Google BigQuery New Connection dialog with the Upload service account file button](https://mammoth.io/docs/images/20260615_094036_Bigquery_screen_11.webp) 1. Click **Upload service account file** 2. Select the JSON key file you downloaded from Google Cloud Console ![BigQuery New Connection dialog with a service account JSON file attached and the Connect button enabled](https://mammoth.io/docs/images/20260615_094058_Bigquery_screen_2_uploaded_json.png1.webp) 3. Mammoth reads the credentials from the file 4. Click **Connect** to validate and save the connection > **Keep your key file secure.** > The service account JSON key grants access to your BigQuery project. Store it securely and do not share it. If you need to revoke access, delete the key in Google Cloud Console under **IAM & Admin → Service Accounts → {your account} → Keys**. ## Step 3: Select a BigQuery dataset and query your data In BigQuery, data is organized into **datasets** (equivalent to schemas). After connecting: - Your BigQuery datasets appear as profiles, named `project - dataset`, under your connection in **Existing Connections** - Click a profile to open it and see its tables in the **List of tables** panel - Click a table to load a `SELECT *` query for it and its preview ![BigQuery Existing Connections list showing the service account and its project - dataset profiles](https://mammoth.io/docs/images/20260615_094122_Bigquery_screen_3_profiles1.webp) ### Write a custom BigQuery query ```sql SELECT order_id, customer_id, amount, created_at FROM `my-project.analytics.orders` WHERE DATE(created_at) >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY) AND status = 'completed' ``` BigQuery uses backtick-quoted fully qualified table names: `project.dataset.table`. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the BigQuery dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., `Hokulani_Data`) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ![Google BigQuery New Dataset dialog with table list, SELECT query, data preview, Save table as, and Update Method](https://mammoth.io/docs/images/20260615_094153_Bigquery_screen_4_dataset1.webp) After saving, your dataset appears in the Data Library. ![Hokulani_Data dataset details showing its BigQuery query and a Google BigQuery batch with state Active](https://mammoth.io/docs/images/20260615_094213_Screenshot2026-05-211231511.webp) To refresh data from BigQuery, create a **Dataset Refresh** automation, which you can run manually or on a schedule. ## Troubleshoot BigQuery connections ### Permission denied errors - Confirm the service account has both **BigQuery Data Viewer** and **BigQuery Job User** roles - For table-level access instead of project-level, grant the roles directly on the BigQuery dataset in **BigQuery → {dataset} → Sharing → Permissions** ### Project not visible - The service account must belong to the same Google Cloud project, or be granted access cross-project through IAM --- # Databricks connector URL: https://mammoth.io/docs/learn/connectors/databricks/ · Updated: 2026-11-02 Connect Mammoth to Databricks with a personal access token and a SQL warehouse HTTP Path, then import a table or SQL query as a dataset. The Databricks connector imports data from your Databricks lakehouse into Mammoth as a dataset. Connect to a SQL warehouse using a personal access token, then browse tables across a catalog and its schemas or write custom SQL queries. ## Before you start You need: - A running Databricks SQL warehouse - A Databricks **personal access token** (PAT) with access to the catalog you want to import from - The warehouse's **HTTP Path**, from **Databricks → SQL Warehouses → {warehouse} → Connection details** - Your Databricks workspace **Host URL** and the **Catalog Name** you want to query - Mammoth's IP address added to your Databricks network configuration—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) > **Tip: Personal access token is the only supported auth method.** > The Databricks connector authenticates with a personal access token only—there's no OAuth or service-principal option. Generate a token from Databricks → User Settings → Developer → Access tokens, and note its expiration date, since PAT expiry is the most common reason a Databricks connection stops working (see Troubleshooting). ## Step 1: Select the Databricks connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Databricks** or find it in the **Databases** category 4. Click the **Databricks** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. | Field | Description | Example | | --- | --- | --- | | **Host URL** | Your Databricks workspace hostname | `dbc-a1b2c3d4-e5f6.cloud.databricks.com` | | **Port** | Connection port | `443` (default) | | **HTTP Path** | The SQL warehouse's connection endpoint | `/sql/1.0/warehouses/a1b2c3d4e5f6g7h8` | | **Personal Access Token** | Your Databricks PAT |—| | **Catalog Name** | The Unity Catalog to connect to—fixed for this connection | `main` | | **Display Name** | Optional label for this connection in Mammoth | `Databricks Production` | ### Find your Databricks HTTP Path In Databricks, go to **SQL Warehouses**, select the warehouse you want to use, and open **Connection details**. Copy the **HTTP Path** value exactly—this field is specific to Databricks and doesn't map to anything in other database connectors, so it's the field most likely to trip up first-time users. A callout below the fields reminds you to whitelist Mammoth's IP address in your database settings—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) for the exact address to use. There's no cluster picker in this form: the **HTTP Path** determines which warehouse Mammoth queries, and the **Catalog Name** is fixed per connection—connecting to a different catalog means creating a new connection. After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. ## Step 3: Select a Databricks schema and query your data Once connected, select the connection under **Existing Connections**. Mammoth lists the schemas in your chosen catalog under **Schema**. Click a schema to browse its tables in the **List of tables** panel. ### Browse Databricks tables Click any table to load a fully qualified preview query, backtick-quoted in Databricks' three-level catalog → schema → table style: ``SELECT * FROM `catalog`.`schema`.`table` ``. ### Write a custom Databricks query ```sql SELECT order_id, customer_id, amount, order_date FROM `main`.`sales`.`orders` WHERE order_date >= current_date() - INTERVAL 90 DAYS AND status = 'completed' ``` > **Tip: No AI query generation for Databricks.** > Databricks doesn't offer the **Describe the data you need...** AI query box. Write or edit SQL directly in the **Enter SQL query** field. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide to the preview screen. ## Step 4: Save the Databricks dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Allow Mammoth in your Databricks network configuration Add Mammoth's IP address to your Databricks workspace's allowed network configuration. See [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) for the current IP address and configuration steps. ## Troubleshoot Databricks connections ### Personal access token is no longer valid The error "Authentication Failed, Your personal access token is no longer valid. Please check and update the token in the identity configuration." is the most common error for this connector. Databricks personal access tokens expire on a date set by your workspace administrator. To fix it: 1. In Databricks, go to **User Settings → Developer → Access tokens** 2. Generate a new token (or check the expiration date on your existing one) 3. Update the **Personal Access Token** field on your Mammoth connection with the new value ### Connection fails with a valid token - Double-check the **HTTP Path**—it must come from a currently running SQL warehouse's **Connection details**, not a cluster or job - Confirm Mammoth's IP address is whitelisted in your Databricks network configuration ### No tables appear after selecting a schema Your personal access token's associated user may lack access to that catalog or schema in Unity Catalog. Ask your Databricks workspace administrator to grant access. --- # Dropbox connector URL: https://mammoth.io/docs/learn/connectors/dropbox-connector/ · Updated: 2026-11-02 Connect Mammoth to Dropbox with OAuth, select files or folders, and import a supported file (CSV, Excel, XML, archives) as a dataset. The Dropbox connector imports files stored in your Dropbox account into Mammoth as a dataset. Authenticate with your Dropbox account using OAuth—no API keys or credentials to manage. Supported file types: `.txt`, `.csv`, `.tsv`, `.psv`, `.xls`, `.xlsx`, `.xml`, `.zip`, `.bz2`, `.gz`, `.tar`, `.7z`. ![Dropbox Existing Connections list showing one connected Dropbox account and the New Connection button](https://mammoth.io/docs/images/20260520_173106_Dropbox-authpermission-2.webp) ## Before you start You need: - A Dropbox account with the files or folders you want to import ## Step 1: Select the Dropbox connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Dropbox** 4. Click the **Dropbox** tile ## Step 2: Authenticate with Dropbox With no saved connection, the **Dropbox** dialog shows **No connections** and a **New Connection** button. Click **New Connection** to start the OAuth flow. Mammoth sends you to Dropbox's authorization page in the same browser tab. Sign in and click **Allow** to grant Mammoth access to your files. You're redirected back to Mammoth automatically. ![Dropbox page asking to log in or sign up to link with Mammoth Analytics, with Google, Apple, and email options](https://mammoth.io/docs/images/20260520_173124_Dropbox-authpermission.webp) ## Step 3: Select files and folders from Dropbox After you authorize Mammoth, the **Connect Dropbox** dialog opens. 1. Click **Select Dropbox Files & Folders**. Dropbox's file chooser opens. 2. Browse your Dropbox and select the files and/or folders you want to connect. 3. The dialog lists everything you selected. Click **+ Add more** to include additional files or folders—a folder you select includes everything inside it. 4. Click **Connect**. ## Step 4: Create the Dropbox dataset The **Dropbox - New Dataset** dialog opens next. It lists the files you connected and shows "Supported file types" for this connector. 1. Select the file you want to import (use the search box to filter if you connected several items) 2. If the file is an Excel workbook (`.xls`/`.xlsx`), enter the **Exact Sheet name** to import 3. Click **Create new dataset** ## Keep Dropbox data up to date Set up a **Dataset Refresh** automation. When it runs, Mammoth re-reads the file from Dropbox, picking up any changes you've made to the file. ## Troubleshoot Dropbox connections ### Authorization does not complete - Mammoth sends you to Dropbox in the same browser tab and returns you to the Data Library afterwards. If you deny access or close the tab, start the connection again - If Mammoth shows "Session expired. Please reconnect Dropbox.", start a new connection ### No files found - Mammoth shows "No files found." when the selected items contain no supported file types. Select a different file or folder, and check that your files use one of the supported types listed at the top of this page --- # Facebook Ads Manager URL: https://mammoth.io/docs/learn/connectors/facebook-ads-manager/ · Updated: 2026-11-02 Connect Mammoth to Facebook Ads Manager with OAuth, query your ad account tables with SQL, and save the results as a dataset. The Facebook Ads connector imports advertising data from your Facebook Ads Manager account into Mammoth as a dataset. Authenticate with OAuth—no API keys required. ## Before you start You need: - A Facebook account with access to the **Ads Manager** ad accounts you want to import data from ## Step 1: Select the Facebook ads connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Facebook** 4. Click the **Facebook Ads Manager** tile ## Step 2: Authenticate with Facebook Click **New Connection** to start the OAuth flow. Mammoth sends you to Facebook's authorization page in the same browser tab. Sign in with your Facebook account and authorize Mammoth. You're redirected back to Mammoth automatically. ## Step 3: Select Facebook Ads data and query Select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom Facebook Ads query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the Facebook Ads dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., *"Facebook Ads Campaign Performance"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Troubleshoot Facebook Ads connections ### Authorization fails - Mammoth sends you to Facebook in the same browser tab and returns you to Mammoth afterwards. If you close the tab or deny access, start the connection again - Make sure you're authorizing with the Facebook account that has access to the ad accounts you need ### No ad accounts visible - Confirm the authorized Facebook account has access to the ad account in Ads Manager --- # Google Cloud Storage connector URL: https://mammoth.io/docs/learn/connectors/google-cloud-storage-connector/ · Updated: 2026-11-02 Connect Mammoth to Google Cloud Storage with a service account JSON key, pick a file from a bucket, and refresh it by name pattern or as the same file. The Google Cloud Storage (GCS) connector imports files from your GCS bucket into Mammoth as a dataset. Authentication uses a Google Cloud service account—no OAuth popup required. Supports a wide range of file formats including CSV, Excel, Parquet, JSON, compressed archives, and more. ## Before you start You need: - A GCS bucket with the files you want to import - A Google Cloud service account that can list buckets (the `storage.buckets.list` permission) and read the objects in your bucket - The service account's JSON key file downloaded to your computer ### Create a Google Cloud service account 1. In [Google Cloud Console](https://console.cloud.google.com), go to **IAM & Admin → Service Accounts** 2. Click **Create Service Account** and give it a name (e.g., `mammoth-gcs`) 3. Grant a role that includes `storage.buckets.list` and read access to the bucket's objects 4. Under **Keys**, click **Add Key → Create new key → JSON** and download the file ## Step 1: Select the Google Cloud Storage connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Google Cloud Storage** 4. Click the **Google Cloud Storage** tile ## Step 2: Create a connection Click **New Connection**. GCS uses a service account file for authentication. ![Google Cloud Storage New Connection dialog with a service account file attached and the Connect button enabled](https://mammoth.io/docs/images/20260826_090841_googleCloudStorage-newConnection.webp) 1. Click **Upload service account file** 2. Select the JSON key file you downloaded from Google Cloud Console 3. Mammoth reads the credentials from the file 4. Click **Connect** to validate and save the connection ![Google Cloud Storage Existing Connections list showing one service account connection and the New Connection button](https://mammoth.io/docs/images/20260826_090948_GoogleCloudStorage-CreatedConneciton.webp) ## Step 3: Select your Google Cloud Storage file After connecting, select the connection under **Existing Connections**. Mammoth lists your buckets as **Profile** entries; click a bucket, then browse the file tree and select the file you want to import. ### Supported Google Cloud Storage file formats `.txt` · `.csv` · `.tsv` · `.psv` · `.xls` · `.xlsx` · `.zip` · `.bz2` · `.gz` · `.tar` · `.7z` · `.parquet` · `.json` ![Google Cloud Storage New Dataset dialog with file tree, Exact Sheet name, Future pulls mode, and Create new dataset](https://mammoth.io/docs/images/20260826_091010_GoogleCloudeStorage-NewDS.webp) ### Choose a future pulls mode After you select a file, a **Future pulls mode** list appears: - **Pull same file**—Every refresh re-reads the file you selected - **Pull next file based on name pattern**—Available only when a single file is selected. Every refresh looks for the next file that matches a date pattern in the file name. Choose the **Folder to pull from** and enter a **File pattern**. For example, for the file `sftp_Tue-01-November-2022_daily.csv` the pattern is `sftp_-
--_daily.csv` In a file pattern, put a date format inside `<>`. The supported formats are `dd`, `mm`, `yyyy`, `yy`, `month`, `mon`, `day`, `dy`, `hh`, `mi`, and `ss`, in full lower case, upper case, or capitalized. The selected file name must contain at least one date format, and the pattern must match the selected file name. If the file is an Excel workbook (`.xls`/`.xlsx`), also enter the **Exact Sheet name** to import. ## Step 4: Create the Google Cloud Storage dataset Click **Create new dataset**. Mammoth does not ask you to choose an update method for this connector. ## Keep Google Cloud Storage data up to date Set up a **Dataset Refresh** automation to re-import the file from GCS on a schedule. If your GCS bucket receives new files regularly (for example, daily export files named `orders_2024-01-15.csv`), choose **Pull next file based on name pattern** when you create the dataset so each refresh picks up the next matching file. ## Troubleshoot Google Cloud Storage connections ### Permission denied - Mammoth shows "Permission denied" when the service account can't list buckets. Grant it a role that includes `storage.buckets.list` and access to the target bucket's objects - Check permissions in **GCS → {bucket} → Permissions** ### Invalid service account file - "Invalid service account file. Please upload a valid JSON key file." means the uploaded file isn't a service account JSON key. Download a new key from **Keys** in Google Cloud Console and upload it again - "Authentication failed. Please verify your service account JSON file." means Google rejected the key. Confirm the key still exists and the service account is enabled ### No buckets or files appear - "No buckets found for this service account." means the service account can't see any bucket - "No supported files found in bucket" means the bucket is empty or contains only file types outside the supported list above --- # Google Drive connector URL: https://mammoth.io/docs/learn/connectors/google-drive/ · Updated: 2026-11-02 Connect Mammoth to Google Drive with OAuth, pick files or folders in Google's file picker, and import a supported file as a dataset. The Google Drive connector imports files stored in your Google Drive into Mammoth as datasets. Connect with your Google account using OAuth—no credentials to manage. Supported file types: `.txt`, `.csv`, `.tsv`, `.psv`, `.xls`, `.xlsx`, `.xml`, `.zip`, `.bz2`, `.gz`, `.tar`, `.7z`. ## Before you start You need: - A Google account with access to the Google Drive files you want to import - The file stored in Google Drive (for a Google Sheets spreadsheet, use the [Google Sheets connector](https://mammoth.io/docs/learn/connectors/google-sheets-connector/), which lets you choose the tab) ## Step 1: Select the Google Drive connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Google Drive** 4. Click the **Google Drive** tile ## Step 2: Select files and folders from Google Drive Clicking the **Google Drive** tile opens the **Google Drive** dialog. With no saved connection it shows **No connections** and a **Sign in with Google** button. 1. Click **Sign in with Google**. Mammoth sends you to Google's authorization page in the same browser tab: ![Google authorization page asking to allow Mammoth Analytics to see and download Google Drive files, with Cancel and Allow](https://mammoth.io/docs/images/20260723_061415_auth_access_drive1.webp) 2. Pick your Google account, then click **Allow**. Mammoth asks for read-only access: it can view and download your Google Drive files and see your email address, and it can't change anything in your Drive. 3. Google returns you to Mammoth, which opens the **Connect Google Drive** dialog. Click **Select Google Drive Files & Folders**. 4. Google's file picker opens. Browse or search your Drive and select the files and/or folders you want to connect. ![Google Drive file picker titled Select files and folders to connect to Mammoth, with folders, files, and Select button](https://mammoth.io/docs/images/20260723_061504_select_folder_file_ui_drive1.webp) 5. Click **Select** You're returned to the **Connect Google Drive** dialog, which now lists everything you selected. Click **+ Add more** to include additional files or folders—a folder you select includes all files and subfolders within it. ![Connect Google Drive dialog listing a selected CSV file and a folder, with Add more and Connect buttons](https://mammoth.io/docs/images/20260723_061547_file_selected_ui_drive1.webp) Click **Connect** once your selection is complete. ## Step 3: Create the Google Drive dataset The **Google Drive - New Dataset** dialog opens next. ![Google Drive New Dataset dialog with a file checklist, supported file types, Exact Sheet name, and Create new dataset](https://mammoth.io/docs/images/20260723_061603_extract_file_folder_ui_drive1.webp) 1. From the checklist, select the file you want to import (use **Search** to filter if you connected several items) 2. If the file is an Excel workbook (`.xls`/`.xlsx`), enter the **Exact Sheet name** to import 3. Click **Create new dataset** ## Keep Google Drive data up to date To refresh your dataset when the source file in Google Drive changes, set up a **Dataset Refresh** automation. When the automation runs, Mammoth re-reads the file from Google Drive and updates the dataset. ## Troubleshoot Google Drive connections ### Authorization fails - Mammoth sends you to Google's authorization page in the same browser tab and returns you to the Data Library after you click **Allow**. If you deny access or close the tab, start the connection again - If the dialog shows a message that the Google Drive picker failed to load, refresh the page and try again - If Mammoth shows "Session expired. Please reconnect Google Drive.", sign in with Google again ### No files found - Mammoth shows "No files found." when the selected items contain no supported file types. Select a different file or folder, and check that your files use one of the supported types listed at the top of this page --- # Google Sheets connector URL: https://mammoth.io/docs/learn/connectors/google-sheets-connector/ · Updated: 2026-11-02 Connect Mammoth to Google Sheets with a Google sign-in, choose a spreadsheet and tab, and import it as a dataset that refreshes manually or on a schedule. The Google Sheets connector imports data from a Google Sheets spreadsheet into Mammoth as a dataset. Authenticate with your Google account using OAuth, then choose the spreadsheet and the tab to import. ## Before you start You need: - A Google account with access to the spreadsheet - The spreadsheet you want to import (you can pick it from a list or paste its link) ## Step 1: Select the Google Sheets connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Google Sheets** 4. Click the **Google Sheets** tile ## Step 2: Connect a Google account Mammoth shows an **Existing Connections** screen listing any Google accounts you've already authenticated. ![Google Sheets Existing Connections list showing one Google account and the Sign in with Google button](https://mammoth.io/docs/images/20260723_061811_Screenshot2026-05-211436201-1.webp) - To reuse a previously connected account, select it from the list. - To connect a new account, click **Sign in with Google**. Clicking **Sign in with Google** starts the OAuth flow: ![Google authorization page asking to allow Mammoth Analytics to see and download Google Drive files, with Cancel and Allow](https://mammoth.io/docs/images/20260723_061841_Screenshot2026-05-211433061.webp) Mammoth sends you to Google's authorization page in the same browser tab. Sign in with the Google account that has access to the spreadsheet, then click **Allow**. Mammoth asks for read-only access to view and download your Google Drive files and see your email address. You're redirected back to Mammoth automatically. Click **Back** to return to the connector selection screen at any point. ## Step 3: Select your spreadsheet and tab Mammoth shows **Connect a Google Sheet** with your Google account and a **Connected** badge. ![Older Google Sheets New Dataset form with Google Sheets URL, Exact Sheet name, text-type checkbox, and Submit button](https://mammoth.io/docs/images/20260723_061855_Screenshot2026-05-211436201.webp) 1. In **Spreadsheet**, open **Select a spreadsheet…**, search with **Search spreadsheets**, and pick your spreadsheet. To use a link instead, click **Paste a link instead** and paste a Google Sheets link. Click **Use picker instead** to go back to the list. 2. In **Tab**, choose the tab to import. Mammoth selects the first tab by default. 3. Click **Continue**. ## Step 4: Review how Mammoth reads the tab Mammoth checks the structure of the tab and shows a **Mammoth interpretation** step. - **Tab is a clean table:** Mammoth reports that the first row is the header and how many columns and rows it detected. Click **Looks right**. - **Tab needs reshaping:** Mammoth shows **Source Data** and **Result**. Describe how the header should be read in the box (for example, name the columns, or use a row as the header), run it, and check the result. Click **Looks right** when it is correct, or click **Import as is** to import the tab exactly as it is, without reshaping. If Mammoth can't read the structure of a tab, it shows "Could not read the structure of this tab. Please try again." ## Step 5: Save the Google Sheets dataset 1. Enter a **Dataset name** (the tab name is filled in for you). 2. Choose how the dataset refreshes: **Manual** (refresh from the sheet whenever you choose) or **On a schedule**. Scheduled refresh depends on your plan; if it isn't available, Mammoth shows "Upgrade your plan to set up automatic dataset refresh." 3. Choose an **Update method**: **Replace** swaps in the latest data each refresh, and **Combine** adds new data alongside what's already there. 4. Click **Create Dataset**. If a later refresh brings back something different from what you saved, Mammoth pauses the update and asks you; your data is never changed silently. ## Import multiple Google Sheets tabs To import multiple tabs from the same spreadsheet, create a separate dataset for each tab. Use the same connection and choose a different **Tab** each time. ## Keep Google Sheets data up to date Choose **On a schedule** when you save the dataset, or set up a **Dataset Refresh** automation later. When a refresh runs, Mammoth reads the current content of the sheet—any changes made in Google Sheets since the last refresh will appear in your Mammoth dataset. ## Troubleshoot Google Sheets imports ### Columns are not what you expected - Check the header on the **Mammoth interpretation** step. Describe how the header should be read, or use **Import as is** - If Mammoth shows "No tabs found in this spreadsheet", the spreadsheet has no readable tabs; check the spreadsheet in Google Sheets ### Access denied - The Google account you authorized must have at least **Viewer** access on the spreadsheet - If Mammoth shows "That doesn't look like a valid Google Sheets link", check the link you pasted --- # Apache Hadoop connector URL: https://mammoth.io/docs/learn/connectors/hadoop-connector/ · Updated: 2026-11-02 Connect Mammoth to Apache Hadoop through HiveServer2: required access, how to create a connection, and how to import a Hive table or HiveQL query. The Apache Hadoop connector connects Mammoth to your Hadoop cluster via HiveServer2 (the standard SQL interface for Hadoop). Import Hive tables or write HiveQL queries to bring structured data from your data lake into Mammoth datasets. ## Before you start You need: - A Hadoop cluster running HiveServer2 (accessible from the internet) - HiveServer2 set up to accept username and password authentication - A Hive user with `SELECT` access on the relevant tables - Your HiveServer2 hostname, port (default: 10000), database name, username, and password - Mammoth's IP address allowed in your cluster's firewall—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) --- ## Step 1: Select the Hadoop connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Hadoop** 4. Click the **Apache Hadoop** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. | Field | Description | Example | | --- | --- | --- | | **Host URL** | Hostname or IP of your HiveServer2 node | `hive.cluster.example.com` | | **Port** | HiveServer2 TCP port | `10000` (default) | | **Username** | Hive user with SELECT access | `mammoth_reader` | | **Password** | Password for the Hive user |—| | **Database** | Name of the Hive database | `analytics` | | **Display Name** | Optional label for this connection | `Hadoop Cluster Prod` | After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. ## Step 3: Select a Hive schema and query your data After you connect, select the connection under **Existing Connections**, then click a schema in the **Schema** list (the default is `default`). If there is only one schema, Mammoth opens it automatically. The **List of tables** panel shows the tables in the schema. Click a table to load a `SELECT *` query for it and its preview, or write a HiveQL query in the **Enter SQL query** editor: ```sql SELECT order_id, customer_id, amount, order_date FROM analytics.orders WHERE order_date >= '2024-01-01' LIMIT 10000 ``` See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the Hadoop dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Troubleshoot Hadoop connections ### Connection fails - Confirm port 10000 is open inbound from Mammoth's IP address - Check the user has access: run a test query in Beeline from your cluster ### Slow queries Large Hive scans can be slow. Use `LIMIT` clauses in your query during setup to get a fast preview, then remove them for the full dataset import. --- # Hubspot connector URL: https://mammoth.io/docs/learn/connectors/hubspot-connector/ · Updated: 2026-11-02 Connect Mammoth to HubSpot with OAuth, query CRM tables with SQL or plain-language AI query generation, and save the results as a dataset. The HubSpot connector imports CRM data from your HubSpot account into Mammoth as a dataset. Authenticate with OAuth—no API keys required. Supports AI query generation for natural-language data selection. ## Before you start You need: - A HubSpot account with access to the data you want to import ## Step 1: Select the HubSpot connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **HubSpot** 4. Click the **HubSpot** tile ## Step 2: Authenticate with HubSpot Click **New Connection** to start the OAuth flow. Mammoth sends you to HubSpot's authorization page in the same browser tab. Sign in and authorize Mammoth. You're redirected back to Mammoth automatically. ## Step 3: Select a HubSpot table and query your data Select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom HubSpot query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. ### Generate a HubSpot query with AI Use the **Describe the data you need...** box above the query editor to tell Mammoth what you want in plain language—for example, *"all customers who became customers this year"*—and click the generate button. Mammoth writes the SQL query based on your table structure and description. The box appears only when AI query is enabled for your workspace, and it is disabled while Mammoth sets up metadata for AI query. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the HubSpot dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., *"HubSpot Contacts"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Troubleshoot HubSpot connections ### Table not visible - Check the HubSpot user's permissions—the user needs access to that type of data in HubSpot --- # Connectors URL: https://mammoth.io/docs/learn/connectors/ · Updated: 2026-11-02 Connect Mammoth to databases, warehouses, cloud storage, CRM, marketing, e-commerce, accounting tools, and REST APIs, and import the data as datasets. Mammoth connects to your data wherever it lives—relational databases, cloud data warehouses, SaaS platforms, cloud storage, and REST APIs. Each connector handles authentication and data selection in a consistent flow, and you can refresh the resulting datasets manually or on a schedule. This page is for anyone who needs to bring data from an external system into Mammoth, whether you are a data analyst setting up your first import or an admin who manages connections. ## Where to start - Find your system in [Connectors by category](#connectors-by-category) and open its guide. - If your database or server sits behind a firewall, read [Network requirements & IP whitelisting](https://mammoth.io/docs/learn/connectors/network-requirements/) first. - To learn the query and preview screen that most connectors share, read [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/). Looking for other ways to create a dataset, such as uploading a file or pasting from the clipboard? See [Data sources](https://mammoth.io/docs/learn/data-sources/). ![Animation of the Data Library: New Dataset opens a dialog with Connectors selected and a searchable grid of connector tiles](https://mammoth.io/docs/images/20260427_110158_Overview.webp) ## How to add a connector Connectors follow the same flow: 1. Go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Choose your connector from the catalog 4. Authenticate (credentials form or OAuth) 5. Select your table or write a query 6. Preview the data, name your dataset, and save (for file connectors, select a file and click **Create new dataset**) See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full walkthrough of the query and preview screen. ## Connectors by category ### Databases Connect to relational databases and cloud warehouses. These connectors use direct credentials (hostname, port, username, password) and require [network access](https://mammoth.io/docs/learn/connectors/network-requirements/) from Mammoth's servers. | Connector | Default port | AI query | Schemas | | --- | --- | --- | --- | | [PostgreSQL](https://mammoth.io/docs/learn/connectors/postgresql-connector/) | 5432 | ✓ | ✓ | | [MySQL](https://mammoth.io/docs/learn/connectors/mysql/) | 3306 | ✓ |—| | [SQL Server](https://mammoth.io/docs/learn/connectors/mssql/) | 1433 | ✓ | ✓ | | [MongoDB](https://mammoth.io/docs/learn/connectors/mongodb/) | 27017 | — | — | | [Snowflake](https://mammoth.io/docs/learn/connectors/snowflake-connector/) | — | — | ✓ | | [Google BigQuery](https://mammoth.io/docs/learn/connectors/bigquery/) | — | — | ✓ | | [Apache Hadoop](https://mammoth.io/docs/learn/connectors/hadoop-connector/) | 10000 | — | ✓ | | [Databricks](https://mammoth.io/docs/learn/connectors/databricks/) | 443 | — | ✓ | | [SAP HANA](https://mammoth.io/docs/learn/connectors/sap-hana-connector/) | 443 | ✓ | ✓ | | [Parquet (Azure)](https://mammoth.io/docs/learn/connectors/parquet-connector/) | — | — | ✓ | ### Cloud storage Pull files from cloud drives and file servers. Supported file types vary by connector. | Connector | Auth | File types | | --- | --- | --- | | [Google Drive](https://mammoth.io/docs/learn/connectors/google-drive/) | OAuth | CSV, TSV, Excel, XML, text, compressed archives | | [Google Sheets](https://mammoth.io/docs/learn/connectors/google-sheets-connector/) | OAuth | Spreadsheets | | [Google Cloud Storage](https://mammoth.io/docs/learn/connectors/google-cloud-storage-connector/) | Service account | CSV, TSV, Excel, text, Parquet, JSON, compressed archives | | [Dropbox](https://mammoth.io/docs/learn/connectors/dropbox-connector/) | OAuth | CSV, TSV, Excel, XML, text, compressed archives | | [SFTP](https://mammoth.io/docs/learn/connectors/sftp/) | Password or SSH key | CSV, TSV, Excel, text, compressed archives | | [SharePoint](https://mammoth.io/docs/learn/connectors/sharepoint-connector/) | App credentials | CSV, TSV, Excel, XML, text, compressed archives | | [OneDrive](https://mammoth.io/docs/learn/connectors/onedrive-connector/) | App credentials | CSV, TSV, Excel, XML, text, compressed archives | | [Azure Blob Storage](https://mammoth.io/docs/learn/connectors/azure-blob-storage-connector/) | App credentials | CSV, TSV, Excel, XML, text, compressed archives | ### CRM & marketing Pull customer, campaign, and email data from your CRM and marketing platforms. | Connector | Auth | AI query | | --- | --- | --- | | [Salesforce](https://mammoth.io/docs/learn/connectors/salesforce-connector/) | OAuth (instance URL) |—| | [HubSpot](https://mammoth.io/docs/learn/connectors/hubspot-connector/) | OAuth | ✓ | | [Mailchimp](https://mammoth.io/docs/learn/connectors/mailchimp-connector/) | OAuth | — | | [SendGrid](https://mammoth.io/docs/learn/connectors/sendgrid-connector/) | API key | — | | [Microsoft Dynamics](https://mammoth.io/docs/learn/connectors/microsoft-dynamics-connector/) | App credentials | — | | [Monday.com](https://mammoth.io/docs/learn/connectors/monday-connector/) | API token | — | ### Analytics Pull advertising data into Mammoth for blending with your other sources. | Connector | Auth | | --- | --- | | [Facebook Ads Manager](https://mammoth.io/docs/learn/connectors/facebook-ads-manager/) | OAuth | ### E-commerce | Connector | Auth | | --- | --- | | [Shopify](https://mammoth.io/docs/learn/connectors/shopify-connector/) | OAuth (shop URL) | ### Accounting | Connector | Auth | AI query | | --- | --- | --- | | [Xero](https://mammoth.io/docs/learn/connectors/xero-connector/) | OAuth | ✓ | | [Netsuite](https://mammoth.io/docs/learn/connectors/netsuite-connector/) | OAuth (account URL) | — | ### Other | Connector | Auth | Notes | | --- | --- | --- | | [REST API](https://mammoth.io/docs/learn/connectors/rest-api/) | Various | AI Chat builder | ## Full connector comparison | Connector | Category | Auth method | Needs firewall rule | AI query | Schemas/profiles | | --- | --- | --- | --- | --- | --- | | PostgreSQL | Databases | Credentials | ✓ | ✓ | ✓ | | MySQL | Databases | Credentials | ✓ | ✓ |—| | SQL Server | Databases | Credentials | ✓ | ✓ | ✓ | | MongoDB | Databases | Credentials | ✓ | — | — | | Snowflake | Databases | Credentials | ✓ | — | ✓ | | Google BigQuery | Databases | Service account JSON | — | — | ✓ | | Apache Hadoop | Databases | Credentials | ✓ | — | ✓ | | Databricks | Databases | Credentials (personal access token) | ✓ | — | ✓ | | SAP HANA | Databases | Credentials | ✓ | ✓ | ✓ | | Parquet (Azure) | Databases | Azure access key | — | — | ✓ | | Google Drive | Cloud storage | OAuth (Google) | — | — | — | | Google Sheets | Cloud storage | OAuth (Google) | — | — | — | | Google Cloud Storage | Cloud storage | Service account JSON | — | — | ✓ | | Dropbox | Cloud storage | OAuth | — | — | — | | SFTP | Cloud storage | Password or SSH key | ✓ | — | — | | SharePoint | Cloud storage | App credentials | — | — | — | | OneDrive | Cloud storage | App credentials | — | — | — | | Azure Blob Storage | Cloud storage | App credentials | — | — | — | | Salesforce | CRM/Marketing | OAuth (instance URL) | — | — | — | | HubSpot | CRM/Marketing | OAuth | — | ✓ | — | | Mailchimp | CRM/Marketing | OAuth | — | — | — | | SendGrid | CRM/Marketing | API key | ✓ | — | — | | Microsoft Dynamics | CRM/Marketing | App credentials | — | — | — | | Monday.com | CRM/Marketing | API token | — | — | — | | Facebook Ads Manager | Analytics | OAuth | — | — | — | | Shopify | E-commerce | OAuth (shop URL) | — | — | — | | Xero | Accounting | OAuth | — | ✓ | ✓ | | Netsuite | Accounting | OAuth (account URL) | — | — | — | | REST API | Other | Various | — | AI Chat | — | - **AI query**—supports natural-language-to-SQL query generation in the preview screen. - **Schemas/profiles**—supports schema or profile selection after authentication. - **Needs firewall rule**—you must whitelist Mammoth's IP address, shown on the connection form, in your firewall. See [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/). ## Shared connector guides - [Network requirements & IP whitelisting](https://mammoth.io/docs/learn/connectors/network-requirements/)—required for database and SFTP connectors - [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/)—how the preview grid, AI query generation, and update method work - [Connector performance & best practices](../performance/connector-optimization)—incremental refresh, query filtering, scheduling - [PDF extraction](https://mammoth.io/docs/learn/connectors/pdf-extraction/)—pull tables and text out of uploaded PDFs and images with AI (not a connector; it works on files already in your Data Library) --- # Mailchimp connector URL: https://mammoth.io/docs/learn/connectors/mailchimp-connector/ · Updated: 2026-11-02 Connect Mammoth to Mailchimp with OAuth, query audience and campaign tables with SQL, and save the results as a dataset. The Mailchimp connector imports email marketing data from your Mailchimp account into Mammoth as a dataset. Authenticate with OAuth—no API keys to manage. ## Before you start You need: - A Mailchimp account with access to the audiences and campaigns you want to import ## Step 1: Select the Mailchimp connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Mailchimp** 4. Click the **Mailchimp** tile ## Step 2: Authenticate with Mailchimp Click **New Connection** to start the OAuth flow. ![Mailchimp Log in and authorize page for Mammoth Analytics with Username, Password, Log In, and Continue with Google](https://mammoth.io/docs/images/20260826_093545_mailchimp_login.webp) Mammoth sends you to Mailchimp's authorization page in the same browser tab. Sign in with your Mailchimp account and click **Allow** to authorize Mammoth. You're redirected back to Mammoth automatically. ## Step 3: Select Mailchimp data and query Select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom Mailchimp query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. ![Mailchimp Existing Connections list showing one connected account and the New Connection button](https://mammoth.io/docs/images/20260826_093620_mailchimp_after_login.webp) See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the Mailchimp dataset ![Mailchimp New Dataset dialog with List of tables, SELECT query, preview, Save table as, and Save as dataset button](https://mammoth.io/docs/images/20260826_093818_mailchimp_dataset_screen.webp) 1. Enter a **dataset name** in the **Save table as** field (e.g., *"Mailchimp Subscribers"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ![Saved AuthorizedApps dataset panel with Open button, Update Method, Connection, and Query details](https://mammoth.io/docs/images/20260826_093906_mailchimp_preview.webp) ## Troubleshoot Mailchimp connections ### No audiences visible - Confirm the authorized Mailchimp account has access to the audience ### Authorization fails - Mammoth sends you to Mailchimp in the same browser tab and returns you to Mammoth afterwards. If you close the tab or deny access, start the connection again --- # Microsoft Dynamics connector URL: https://mammoth.io/docs/learn/connectors/microsoft-dynamics-connector/ · Updated: 2026-11-02 Connect Mammoth to Microsoft Dynamics 365 with Azure app credentials, query entities with SQL, and save the results as a dataset. The Microsoft Dynamics connector imports CRM and business data from your **Microsoft Dynamics 365** environment into Mammoth as a dataset. Authentication uses Azure app credentials (Tenant ID, Client ID, Client Secret)—this is an app-level connection, not tied to an individual user account. ## Before you start You need to register an **Azure Active Directory app** with access to your Dynamics 365 environment. This is a one-time setup, typically done by a Microsoft 365 / Dynamics admin. ### Register the Azure AD app 1. Go to [Azure Portal](https://portal.azure.com) → **Azure Active Directory → App registrations** 2. Click **New registration**—name it (e.g., `Mammoth Dynamics`) and click **Register** 3. Copy the **Application (client) ID**—this is your **Client ID** 4. Copy the **Directory (tenant) ID**—this is your **Tenant ID** 5. Go to **Certificates & secrets → New client secret**, add a description, set an expiry, and click **Add** 6. Copy the secret **Value** immediately (it won't be shown again)—this is your **Client Secret** 7. In your Dynamics 365 admin center, add the app as an **application user** with a security role that has read access to the entities you want to import You'll also need your Dynamics 365 environment's organization URL, for example `https://yourorg.crm.dynamics.com`. Use your environment-specific URL, not the Microsoft discovery service URL (`organizations.crm.dynamics.com`). ## Step 1: Select the Microsoft Dynamics connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Microsoft Dynamics** or find it in the **CRM & Marketing** category 4. Click the **Microsoft Dynamics** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. ![Microsoft Dynamics New Connection form with Dynamics Organization URL, Tenant ID, Client ID, and Client Secret fields](https://mammoth.io/docs/images/20260826_114154_styled.webp) | Field | Description | Example | | --- | --- | --- | | **Dynamics Organization URL** | Your Dynamics 365 environment URL | `https://yourorg.crm.dynamics.com` | | **Tenant ID** | Azure AD Directory (tenant) ID | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | | **Client ID** | Azure AD Application (client) ID | `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` | | **Client Secret** | The app secret value you created |—| All four fields are required. Click **Connect** once they're filled in—there's no OAuth sign-in step, since the connector authenticates directly with the app credentials above. If validation fails, the error message appears at the bottom of the form. ## Step 3: Select a Dynamics entity and query your data Select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom Dynamics query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide to the preview screen. ## Step 4: Save the Dynamics dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Troubleshoot Microsoft Dynamics connections ### Authentication fails - Mammoth shows "Authentication Failure. Please check your Microsoft credentials." when the credentials are rejected. Check all four values (Dynamics Organization URL, Tenant ID, Client ID, Client Secret) are copied correctly - If Mammoth says the Organization URL appears to be the Microsoft Discovery Service URL, replace it with your environment-specific URL, for example `https://yourorg.crm.dynamics.com` ### Access denied (403) - Ensure the app registration has been added as an Application User in your Dynamics 365 environment with the required security role ### Client secret expired - Client secrets expire based on the duration you set during creation—generate a new secret in Azure Portal and update the connection in Mammoth ### Entity not visible in the list - Confirm the app's application user has a security role granting read access to that entity in Dynamics 365 --- # Monday.com connector URL: https://mammoth.io/docs/learn/connectors/monday-connector/ · Updated: 2026-11-02 Connect Mammoth to monday.com with a personal access token, query board tables with SQL, and save the results as a dataset. The Monday.com connector imports board and item data from your **monday.com** account into Mammoth as a dataset. Authentication uses a monday.com personal access token—no OAuth flow required. ## Before you start You need: - A monday.com account with access to the boards you want to import - A monday.com **personal access token** ### Get a personal access token Copy your personal API token from your monday.com account, or generate a new one. See monday.com's documentation for where to find it. ## Step 1: Select the Monday.com connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Monday.com** or find it in the **CRM & Marketing** category 4. Click the **Monday.com** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. ![Monday.com New Connection form with Personal Access Token and Name fields and a Connect button](https://mammoth.io/docs/images/20260826_094514_monday.com-newconnection.webp) | Field | Description | | --- | --- | | **Personal Access Token** | Your monday.com API token | | **Name** | A label for this connection (required) | Click **Connect**. Mammoth validates the token and saves the connection; if validation fails, the error message appears at the bottom of the form. ## Step 3: Select a monday.com table and query your data Select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom monday.com query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the monday.com dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., *"Monday Project Tracker"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Troubleshoot monday.com connections ### Authentication fails - Mammoth shows "Invalid or expired API token. Please check your Monday.com API token." when the token is rejected - Confirm the personal access token was copied completely and hasn't been regenerated (which invalidates the old token) since you created the connection ### Board not visible - Confirm the token owner has access to the board in monday.com --- # MongoDB connector URL: https://mammoth.io/docs/learn/connectors/mongodb/ · Updated: 2026-11-02 Connect Mammoth to MongoDB: required access, how to create a connection, and how to import a collection or SQL query as a dataset. The MongoDB connector imports data from your MongoDB database into Mammoth as a dataset. Select a collection from the browser or write a query to import documents as rows. ## Before you start You need: - A MongoDB instance accessible from the internet - A MongoDB user with `read` access on the database you want to import from - Your server's hostname, port (default: 27017), database name, username, and password - Mammoth's IP address added to your MongoDB network allowlist—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) ## Step 1: Select the MongoDB connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **MongoDB** 4. Click the **MongoDB** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. ![MongoDB New Connection form with Host URL, Port 27017, Username, Password, Database, and Display Name fields](https://mammoth.io/docs/images/20260615_102934_Screenshot2026-05-211505091.webp) | Field | Description | Example | | --- | --- | --- | | **Host URL** | Hostname or IP address of your MongoDB server | `mongo.example.com` | | **Port** | TCP port MongoDB listens on | `27017` (default) | | **Username** | MongoDB user with read access | `mammoth_reader` | | **Password** | Password for the user |—| | **Database** | Name of the MongoDB database | `analytics` | | **Display Name** | Optional label for this connection | `MongoDB Atlas` | > **Tip: MongoDB Atlas.** > If you're using MongoDB Atlas, find your connection hostname in **Atlas → Database → Connect → Connect your application**. It looks like `cluster0.abc123.mongodb.net`. Use port `27017` and add Mammoth's IP address to your Atlas **Network Access** allowlist. After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. ## Step 3: Select a MongoDB collection and query your data After you connect, select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the collections in your database. Click a collection name to load a `SELECT *` query for it and its preview. ### Write a custom MongoDB query Use the **Enter SQL query** editor to filter documents or select specific fields. You query your MongoDB collections with SQL: ```sql SELECT _id, name, email, createdAt FROM customers WHERE status = 'active' ``` ![MongoDB New Dataset dialog with collection list, SELECT query, preview of three rows, and Dataset saved message](https://mammoth.io/docs/images/20260615_102954_Screenshot2026-05-211511351.webp) See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the MongoDB dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ![MongoDB New Dataset dialog with Save table as, Update Method, and Save as dataset button below the preview](https://mammoth.io/docs/images/20260615_103011_Screenshot2026-05-211512401.webp) ## Troubleshoot MongoDB connections ### Connection fails - Confirm port 27017 is open inbound from Mammoth's IP address - For MongoDB Atlas, check your **Network Access** list in the Atlas console - Verify the user has `read` role on the database: `db.grantRolesToUser("mammoth_reader", [{ role: "read", db: "analytics" }])` --- # SQL Server connector URL: https://mammoth.io/docs/learn/connectors/mssql/ · Updated: 2026-11-02 Connect Mammoth to SQL Server: what you need, how to enter credentials, and how to import a table or custom T-SQL query as a dataset. The SQL Server connector imports data from Microsoft SQL Server into Mammoth as a dataset. You can import tables from any schema or write custom T-SQL queries to filter and shape your data. Mammoth offers AI-assisted query generation when it is enabled for your workspace, and you can refresh the dataset manually or on a schedule. ## Before you start You need: - A SQL Server instance accessible from the internet - A SQL Server login with `SELECT` permission on the relevant tables - Your server's hostname or IP, port (default: 1433), database name, username, and password - Mammoth's IP address allowed in Windows Firewall and any cloud security groups—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) ## Step 1: Select the SQL Server connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **SQL Server** 4. Click the **SQL Server** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. ![SQL Server New Connection form with empty Host URL, Port 1433, Username, Password, Database, and Display Name fields](https://mammoth.io/docs/images/20260615_102404_Screenshot2026-05-281647241.webp) | Field | Description | Example | | --- | --- | --- | | **Host URL** | Hostname or IP address of your SQL Server | `sqlserver.example.com` | | **Port** | TCP port SQL Server listens on | `1433` (default) | | **Username** | SQL Server login with SELECT access | `mammoth_reader` | | **Password** | Password for the login |—| | **Database** | Name of the database to connect to | `SalesDB` | | **Display Name** | Optional label for this connection | `SQL Server Production` | A callout below the fields shows the Mammoth IP address to allow in your database settings—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/). After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. ## Step 3: Select a SQL Server schema and query your data ### Select a SQL Server schema SQL Server databases typically have multiple schemas (the default is `dbo`). Select your connection under **Existing Connections**, then click the schema that contains your tables in the **Profile** list. If the database has only one schema, Mammoth opens it automatically. ### Browse and select SQL Server tables Click any table in the **List of tables** panel to load a `SELECT *` query for it and its preview. ### Write a custom T-SQL query Edit the SQL to filter or transform data. SQL Server uses square brackets for identifiers: ```sql SELECT [OrderID], [CustomerID], [OrderDate], [TotalAmount] FROM [dbo].[Orders] WHERE [OrderDate] >= DATEADD(day, -90, GETDATE()) AND [Status] = 'Completed' ``` ### Generate a SQL Server query with AI When enabled for your workspace, the **Describe the data you need...** box appears above the query editor. Use it to tell Mammoth what you want in plain language—for example, *"all completed orders in the last 90 days"*—and click the generate button. Mammoth writes the SQL query based on your table structure and description. The box is disabled while Mammoth sets up metadata for AI query. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the SQL Server dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Keep SQL Server data up to date Set up a **Dataset Refresh** automation for scheduled updates. See [Connector performance & best practices](https://mammoth.io/docs/learn/performance/connector-optimization/) for large-table strategies. ## Troubleshoot SQL Server connections ### Connection fails - Ensure TCP/IP is enabled in **SQL Server Configuration Manager → Protocols** - Confirm port 1433 is open inbound from Mammoth's IP address in Windows Firewall and any cloud security groups ### Login fails - Check that SQL Server Authentication is enabled (not just Windows Authentication) - Verify the user exists and has `CONNECT` permission on the database: ```sql CREATE LOGIN mammoth_reader WITH PASSWORD = 'strong_password'; CREATE USER mammoth_reader FOR LOGIN mammoth_reader; GRANT SELECT ON SCHEMA::dbo TO mammoth_reader; ``` --- # MySQL connector URL: https://mammoth.io/docs/learn/connectors/mysql/ · Updated: 2026-11-02 Connect Mammoth to MySQL: what you need, how to enter credentials, and how to import a table or custom SQL query as a dataset. The MySQL connector imports data from your MySQL database into Mammoth as a dataset. Import entire tables or write custom SQL queries to select specific rows, columns, or joined data. Mammoth offers AI-assisted query generation when it is enabled for your workspace, and you can refresh the dataset manually or on a schedule. ## Before you start You need: - A MySQL server accessible from the internet - A database user with `SELECT` permission on the tables you want to import - Your server's hostname or IP address, port (default: 3306), database name, username, and password - Mammoth's IP address added to your MySQL firewall allowlist—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) ## Step 1: Select the MySQL connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **MySQL** 4. Click the **MySQL** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. ![MySQL New Connection form with Host URL, Port, Username, Password, Database, and Display Name fields](https://mammoth.io/docs/images/20260615_101313_Screenshot2026-05-211600381.webp) | Field | Description | Example | | --- | --- | --- | | **Host URL** | Hostname or IP address of your MySQL server | `mysql.example.com` | | **Port** | TCP port MySQL listens on | `3306` (default) | | **Username** | Database user with SELECT access | `mammoth_reader` | | **Password** | Password for the database user |—| | **Database** | Name of the database to connect to | `ecommerce_db` | | **Display Name** | Optional label for this connection in Mammoth | `MySQL Production` | **Tip:** Mammoth needs network access\ Your MySQL server must allow inbound connections from Mammoth's IP address, which the connection form shows. See [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) for configuration steps, including the user setup needed for external access. After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. ![MySQL Existing Connections list showing one saved connection and the New Connection button](https://mammoth.io/docs/images/20260615_101412_Screenshot2026-05-211552341.webp) ## Step 3: Select a table and query your data After you connect, select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows all tables in your database. Click a table name to load a `SELECT *` query for it and its preview. To write a custom query, edit the SQL in the **Enter SQL query** editor. MySQL uses backtick quoting for identifiers: ```sql SELECT `order_id`, `customer_id`, `total_amount`, `created_at` FROM `orders` WHERE `created_at` >= DATE_SUB(NOW(), INTERVAL 90 DAY) AND `status` = 'shipped' ``` Click **Run** to preview results. ### AI query generation When enabled for your workspace, the **Describe the data you need...** box appears above the query editor. Use it to tell Mammoth what you want in plain language—for example, *"all shipped orders in the last 90 days with customer IDs"*—and click the generate button. Mammoth writes the SQL query based on your table structure and description. The box is disabled while Mammoth sets up metadata for AI query. ![Edit query dialog with table list, AI description box, SQL editor, Run button, and data preview](https://mammoth.io/docs/images/20260615_101336_Screenshot2026-05-211559321.webp) See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the MySQL dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Keep MySQL data up to date Set up a **Dataset Refresh** automation to refresh your MySQL dataset on a schedule. ## Troubleshoot MySQL connections ### Connection fails - Confirm Mammoth's IPs are allowed in your MySQL grants and firewall - Check that your MySQL user has an external host entry, not just `localhost`: ```sql CREATE USER 'mammoth_reader'@'%' IDENTIFIED BY 'password'; GRANT SELECT ON your_database.* TO 'mammoth_reader'@'%'; ``` --- # Netsuite connector URL: https://mammoth.io/docs/learn/connectors/netsuite-connector/ · Updated: 2026-11-02 Connect Mammoth to Oracle NetSuite with OAuth and your account URL, query record tables with SQL, and save the results as a dataset. The Netsuite connector imports ERP and accounting data from your **Oracle NetSuite** account into Mammoth as a dataset. Authenticate with OAuth using your NetSuite account URL—no API keys required. ## Before you start You need: - A NetSuite account - Your NetSuite **account URL**, which contains your account ID (for example, `https://1234567.app.netsuite.com`) ## Step 1: Select the Netsuite connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Netsuite** or find it in the **Accounting** category 4. Click the **Netsuite** tile ## Step 2: Authenticate with NetSuite The Netsuite connector asks for your account URL before opening the OAuth flow. ![Netsuite New Connection form with the Your NetSuite Account URL (Domain) field and Connect button](https://mammoth.io/docs/images/20260826_115906_styled4.webp) 1. In the **Your NetSuite Account URL (Domain)** field, enter your NetSuite account URL, for example `https://1234567.app.netsuite.com` 2. Click **Connect**—Mammoth extracts your account ID from the URL and sends you to NetSuite's login page in the same browser tab 3. Sign in with your NetSuite credentials and authorize Mammoth 4. You're redirected back to Mammoth automatically with the connection active ## Step 3: Select NetSuite data and query After authenticating, select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom NetSuite query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the NetSuite dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., *"NetSuite Sales Orders"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Troubleshoot NetSuite connections ### Authorization does not complete - Mammoth sends you to NetSuite in the same browser tab and returns you to Mammoth afterwards. If you close the tab or deny access, start the connection again - Confirm the account URL is correct—Mammoth reads the account ID directly from the domain, so a malformed URL prevents the OAuth redirect from being built correctly ### Record type not visible - The authenticated NetSuite role may not have permission on that record type. Ask your NetSuite admin to check the role's permissions. --- # Network requirements & IP whitelisting URL: https://mammoth.io/docs/learn/connectors/network-requirements/ · Updated: 2026-11-02 Find Mammoth's connecting IP address, default ports, and firewall steps for PostgreSQL, MySQL, SQL Server, MongoDB, Snowflake, SFTP, and other connectors. Database and file server connectors require Mammoth's servers to reach your infrastructure over the internet. If your database, warehouse, or SFTP server sits behind a firewall, you need to add Mammoth's IP address to your allowlist before the connection can succeed. This guide covers where to find the IP address, the default ports, and how to configure your firewall for each connector type. ## Which connectors need a firewall rule? The following connectors connect directly to your infrastructure. Their connection forms show a message with the IP address Mammoth connects from: | Connector | Default port | Protocol | | --- | --- | --- | | PostgreSQL | 5432 | TCP | | MySQL | 3306 | TCP | | SQL Server | 1433 | TCP | | MongoDB | 27017 | TCP | | Snowflake | 443 | HTTPS | | Apache Hadoop | 10000 | TCP | | Databricks | 443 | HTTPS | | SAP HANA | 443 (form default); confirm with your admin | TCP | | SFTP | 22 | SSH | | SendGrid | 443 | HTTPS | Google BigQuery and the Parquet (Azure) connector connect over standard HTTPS and don't require a firewall rule for typical setups—see the notes for each below if you've restricted access on your end. OAuth-based connectors (Google Drive, Salesforce, HubSpot, Shopify, etc.) connect to vendor-managed APIs and do not require firewall rules on your side. ## Mammoth's IP address When you open **New Connection** for one of the connectors above, the form shows the IP address Mammoth connects from. The message reads "Please make sure IP [address] is whitelisted in your database settings." The SFTP form shows "Mammoth connects from IP [address]. Add it to your server's allowlist if needed." Allow that IP address in your firewall before you click **Connect**. In the examples below, `` stands for the address shown on the form. ## Configure your firewall for each connector ### PostgreSQL 1. Open your `pg_hba.conf` file (typically at `/etc/postgresql/{version}/main/pg_hba.conf`) 2. Add a line for Mammoth's IP: ```plaintext host your_database your_user /32 md5 ``` 3. Reload PostgreSQL: `sudo systemctl reload postgresql` 4. If your server is behind a cloud security group (AWS, GCP, Azure), also open port **5432** inbound from Mammoth's IP in the security group settings. ### MySQL 1. Sign in to your MySQL instance as an admin user 2. Create a user that can connect from Mammoth's IP and grant it read access: ```sql CREATE USER IF NOT EXISTS 'your_user'@'' IDENTIFIED BY 'password'; GRANT SELECT ON your_database.* TO 'your_user'@''; ``` 3. Open port **3306** inbound in your firewall or cloud security group. ### SQL Server 1. Open **SQL Server Configuration Manager** 2. Under **SQL Server Network Configuration → Protocols**, ensure **TCP/IP** is enabled 3. In your firewall or Windows Firewall, add an inbound rule allowing port **1433** from Mammoth's IP 4. For cloud-hosted instances (Azure SQL, AWS RDS), update the inbound security group rules accordingly. ### MongoDB 1. Open your `mongod.conf` file 2. Under `net:`, ensure `bindIp` allows connections from outside the host (or use a firewall to restrict at the network level) 3. Add an inbound rule allowing port **27017** from Mammoth's IP in your firewall or cloud security group. 4. Ensure your MongoDB user has at least `read` access on the relevant database. ### Snowflake If your Snowflake account has a **network policy** restricting IP access, add Mammoth's IP address to the allowed IP list of that policy in Snowflake. ### Apache Hadoop (Hive) Open port **10000** inbound from Mammoth's IP in your firewall or cloud security group. ### Databricks If your workspace restricts access by IP, add Mammoth's IP address to your workspace's IP access list. See the [Databricks connector guide](https://mammoth.io/docs/learn/connectors/databricks/) for the rest of the connection setup. ### SAP HANA Open your HANA instance's listening port inbound from Mammoth's IP in your firewall or cloud security group. The port varies by instance—confirm the correct value with your HANA administrator (see the [SAP HANA connector guide](https://mammoth.io/docs/learn/connectors/sap-hana-connector/) for details). ### SFTP Open the port your SFTP server listens on (default **22**) inbound from Mammoth's IP. For password authentication, ensure the SFTP user exists and has read access to the relevant directory. For key-based authentication, see the [SFTP connector guide](https://mammoth.io/docs/learn/connectors/sftp/). ### Google BigQuery BigQuery authenticates with a Google Cloud service account JSON key over HTTPS. Access is controlled through IAM permissions on the service account. ### Parquet (Azure) The Parquet connector reads from Azure Data Lake Storage over HTTPS. If you restricted access to your storage account with Azure storage firewalls or virtual networks, allow Mammoth's outbound IP address there. Contact Mammoth support to confirm the address for your workspace. ### SendGrid If your SendGrid account restricts API access by IP, add Mammoth's IP address, shown in the message on the SendGrid connection form, to the allowed list. Otherwise Mammoth's requests to your account may be blocked. ## Test your connection after allowing the IP address After allowing the IP address, fill in the connection form and click **Connect**. Mammoth validates the credentials and saves the connection. If validation fails, the error message appears at the bottom of the form. If it fails, check: - Mammoth's IP address is in your allowlist - The correct port is open (see the table at the top of this page) - Your database user has permission to connect from an external host ## Use a custom port If your database runs on a non-standard port, enter your custom port in the **Port** field of the connection form, and make sure that port is open inbound from Mammoth's IP. --- # OneDrive connector URL: https://mammoth.io/docs/learn/connectors/onedrive-connector/ · Updated: 2026-11-02 Connect Mammoth to OneDrive with Azure app credentials, select files from a folder tree, import them as datasets, and export a View back to OneDrive. The OneDrive connector imports files from **Microsoft OneDrive** into Mammoth as datasets, and can also export a View's results back out to OneDrive. Authentication uses Azure app credentials (Tenant ID, Client ID, Client Secret) tied to a specific user's mailbox/drive—not a per-user OAuth sign-in. ![OneDrive dialog showing No connections and a New Connection button](https://mammoth.io/docs/images/20260826_100120_onedrive-noconnectionsscreen.webp) ## Before you start You need an **Azure Active Directory app** registered with Microsoft Graph access to the target OneDrive account. This is a one-time setup, typically done by a Microsoft 365 admin. ### Register the Azure AD app 1. Go to [Azure Portal](https://portal.azure.com) → **Azure Active Directory → App registrations** 2. Click **New registration**—name it (e.g., `Mammoth OneDrive`) and click **Register** 3. Copy the **Application (client) ID**—this is your **Client ID** 4. Copy the **Directory (tenant) ID**—this is your **Tenant ID** 5. Go to **Certificates & secrets → New client secret**, add a description, set an expiry, and click **Add** 6. Copy the secret **Value** immediately (it won't be shown again)—this is your **Client Secret** 7. Go to **API permissions → Add a permission → Microsoft Graph → Application permissions** 8. Add the Files application permission covering the target user's drive 9. Click **Grant admin consent** You'll also need the **email address / User Principal Name** of the OneDrive account you want Mammoth to read from—this is entered as **User ID** in the connection form. ## Step 1: Select the OneDrive connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **OneDrive** 4. Click the **OneDrive** tile If no connection exists yet, you'll see a **No connections** panel with a **New Connection** button. ## Step 2: Create a connection Click **New Connection** to open the **OneDrive - New Connection** form. ![OneDrive New Connection form with User ID, Tenant ID, Client ID, and Client Secret fields](https://mammoth.io/docs/images/20260826_100206_onedrive-newconnectrion.webp) | Field | Description | Example | | --- | --- | --- | | **User ID (Email / User Principal Name)** | The OneDrive account Mammoth should read from | `user@yourorg.onmicrosoft.com` | | **Tenant ID** | Azure AD Directory (tenant) ID | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | | **Client ID** | Azure AD Application (client) ID | `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` | | **Client Secret** | The app secret value you created |—| All four fields are required. Click **Connect** once they're filled in—there's no OAuth sign-in step, since the connector authenticates directly with the app credentials above. If validation fails, the error message appears at the bottom of the form. ## Step 3: Find and select your OneDrive file After connecting, select the connection under **Existing Connections**. Mammoth shows a **folder tree** of the connected OneDrive account, starting at the root. - Click a folder to expand it—its contents load on demand (you'll briefly see "Loading folder contents…") - Check the box next to a file to select it, or check a folder to include everything inside it - You can select more than one file/folder in a single connection ### Supported OneDrive file types `.txt` · `.csv` · `.tsv` · `.psv` · `.xls` · `.xlsx` · `.xml` · `.zip` · `.bz2` · `.gz` · `.tar` · `.7z` ## Step 4: Create the OneDrive dataset Click **Create new dataset**. Mammoth does not ask you to choose an update method for this connector. To keep the dataset in sync as the source file changes in OneDrive, set up a **Dataset Refresh** automation. ## Exporting to OneDrive Separately from importing, you can push a View's output *to* OneDrive as an export action: 1. In the data editor, click **Export and Share**, choose **External Destinations**, and select **Export to OneDrive** 2. Fill in **Tenant ID**, **Client ID**, **Client Secret**, and **User ID** 3. Set a **Folder Path** (the default is the root of the user's OneDrive) and a **File Name** 4. Optionally enable **Include hidden columns** ## Troubleshoot OneDrive connections ### Authentication fails - Check all four values (User ID, Tenant ID, Client ID, Client Secret) are copied correctly - Confirm admin consent has been granted for the Graph API permission ### OneDrive not found for the specified user The error "OneDrive not found for the specified user" means the **User ID** doesn't match a valid mailbox/drive in the tenant—double-check for typos in the email/UPN ### Client secret expired - Client secrets expire based on the duration you set during creation—generate a new secret in Azure Portal and update the connection in Mammoth ### File does not appear in the search list - Confirm the file is one of the supported formats listed above - Confirm the file lives in the connected user's own OneDrive, not a folder only shared with them --- # Parquet (Azure) connector URL: https://mammoth.io/docs/learn/connectors/parquet-connector/ · Updated: 2026-11-02 Connect Mammoth to Parquet files in Azure Data Lake Storage with an access key, then query a file or folder and save it as a dataset. The Parquet connector reads Parquet files stored in **Azure Data Lake Storage** and imports them into Mammoth as datasets. The connection form is titled "Azure Data Lake Storage Credentials." This connector is for Parquet-format files on Azure—use the [Google Cloud Storage connector](https://mammoth.io/docs/learn/connectors/google-cloud-storage-connector/) for Parquet files on GCS. ## Before you start You need: - An Azure storage account containing Parquet files - Your storage account's **Access Key** (found in Azure Portal → Storage Account → Security + networking → Access keys) - The **Account** name and **Container (File System)** name where your Parquet files are stored ## Step 1: Select the Parquet connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Parquet** 4. Click the **Parquet** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. ![Parquet New Connection form titled Azure Data Lake Storage Credentials with Access Key, Account, and Container fields](https://mammoth.io/docs/images/20260615_112514_Screenshot2026-05-221750231.webp) | Field | Description | Example | | --- | --- | --- | | **Access Key** | Azure Storage account access key (Key 1 or Key 2) | `abc123...` (long string) | | **Account** | Azure storage account name | `mydatalake` | | **Container (File System)** | Blob container name where your Parquet files are stored | `analytics-data` | ### Find your Azure access key 1. Open [Azure Portal](https://portal.azure.com) and go to your storage account 2. Under **Security + networking**, select **Access keys** 3. Copy **key1** (or key2) After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. ## Step 3: Select a Parquet file and query your data After connecting, select the connection under **Existing Connections**. Mammoth lists the folders (directory paths) in your container as **Profile** entries. Select one to browse the Parquet files within it in the **List of tables** panel, then click a file or directory to load a preview. The **Enter SQL query** editor lets you write SQL against the selected data: ```sql SELECT customer_id, event_type, event_date, revenue FROM my_parquet_schema WHERE event_date >= '2024-01-01' ``` ![Parquet New Dataset dialog with file list, SELECT query, data preview, Save table as, and Save as dataset button](https://mammoth.io/docs/images/20260615_112533_Screenshot2026-05-221723501.webp) See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the Parquet dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Troubleshoot Parquet connections ### Authentication fails - Double-check the access key—it's a long base64 string; a single character error will fail - Confirm the account name matches exactly (case-sensitive) ### Container not found - The container name is case-sensitive in Azure - Confirm the container exists in the Azure Portal under **Containers** --- # PDF extraction URL: https://mammoth.io/docs/learn/connectors/pdf-extraction/ · Updated: 2026-11-02 Extract tables and text from PDFs and images in the Data Library with AI, review the detected tables, and save them as datasets. PDF Extraction lets you pull structured data out of PDF files and images using AI. Upload a document to your Data Library, choose what to import, and Mammoth converts the content into a dataset you can query, transform, and share. ## Before you start - The PDF or image file must be uploaded to your **Data Library** before starting extraction. - If your workspace has its own AI provider key, the extraction uses that key, so the key needs enough credit or quota. Mammoth shows a message above the extraction options when a workspace key is in use. - PDF and image upload is available when enabled for your workspace. - PDF extraction can depend on your plan. If **Extract Data** is restricted, Mammoth prompts you to upgrade. > **Limits to know before you start:** > > - Mammoth extracts up to **2,000 pages** per document (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)) > - Large documents can take a while to process. If an extraction takes longer than Mammoth can wait, it tells you the extraction may still finish and to reopen the file in a few minutes > - Scanned PDFs require clear image quality—low-resolution scans produce poor results > - **Password-protected PDFs are supported.** After uploading, Mammoth shows "Access to this file is protected by a password". Enter the **File password** and submit—once it is accepted, the normal extraction flow proceeds. ## Supported file types | Type | Notes | | --- | --- | | **PDF** (`.pdf`) | Works best with text-based PDFs; scanned PDFs require clear image quality | | **PNG** (`.png`) | | | **JPEG** (`.jpg`, `.jpeg`) | | | **TIFF** (`.tif`, `.tiff`) | Mammoth converts the TIFF to a PDF | | **HEIC** (`.heic`, `.heif`) | Mammoth converts the file to a JPEG | | **WebP** (`.webp`) | | ## Step 1: Upload your file Upload your PDF or image to the Data Library. Once the upload completes, the file appears in the Data Library. Click the file row to open the preview panel on the right. You'll see the message **"We need your input before we process this file"** and a card that says **"Extract the Data from the file to access it:"** with an **Extract Data** button: ![Data Library with an uploaded PDF selected and a preview panel with an Extract Data button](https://mammoth.io/docs/images/20260427_055531_PDFuploaded-showingrightpreviewpanel1.webp) ## Step 2: Choose what to import Click **Extract Data**. The **Review data import** modal opens, with your file name and type under the title. The file is shown on the left. On the right, under **What to import**, choose one of three options: | Option | What it does | | --- | --- | | **Only tables** | Imports just the detected tables | | **All content** | Imports the detected tables and the surrounding text | | **Custom** | Imports exactly what you describe | **Custom** shows a text box with the placeholder *"Describe what to import from this PDF…"*. Under **TRY:** you can click either suggestion to fill the box: **Convert all content into tables** or **Extract existing tables only**. Click **Extract**. Extraction never starts automatically, because reading the document takes time and may use your AI provider key's quota. For **Custom**, **Extract** stays disabled until you write an instruction, and Mammoth shows "Describe what to import first". ### Write effective prompts | | Example | Why it works | | --- | --- | --- | | **Good** | *"Extract the invoice number, vendor name, invoice date (MM/DD/YYYY), and total amount (numeric) from this invoice"* | Specific field names, expected data types, clear scope | | **Good** | *"Get all line items: product name, quantity, unit price, and line total"* | Matches the table structure in the doc | | **Good** | *"Extract only the summary table on page 1"* | Narrows scope to avoid noise | | **Vague** | *"Get the data"* | No field names—AI guesses what's important | | **Vague** | *"Extract the table"* | Ambiguous when there are multiple tables | | **Vague** | *"Get the numbers"* | No column names or context | **Prompt tips:** - Specify expected data types: `"total amount (numeric)"`, `"date (MM/DD/YYYY format)"` - Use exact field names that match your column naming expectations - Mention the page number if data is on a specific page - If the result isn't right, change what to import and extract again without re-uploading the file ## Step 3: Review the extracted tables While Mammoth reads the document, it shows progress such as "Processing PDF - Page 3 of 10". When extraction completes, the right pane lists the detected tables under **What to import: {option}** (for **Custom**, your prompt appears next to it). For each detected table: - A **checkbox** to include or exclude it - The label **Table N**, with the page it came from and its column and row counts - A preview of its data when you click it The pane header shows how many tables Mammoth found, or "N of M selected" when there are several. **Not what you wanted?** Click the pencil icon (**Change what to import**) to go back to the options, then extract again. The file doesn't need to be re-uploaded. ## Step 4: Create your dataset(s) Select the tables you want to keep, then click **Looks right**. Mammoth opens the **Save dataset** step (**Save N datasets** if you selected several tables): - **One table selected:** the dataset name is filled in from the file name. Click the pencil icon to rename it. You can also choose how it refreshes: **Manual** (re-upload a new file when there is one, and the same instructions replay over it) or **When a new file arrives** (watch a Mammoth folder for new files and add them to the dataset using the same instructions). The automatic option depends on your plan. - **Multiple tables selected:** Mammoth lists the tables to import, and one set of instructions produces all the datasets. If a new file looks different from the one you saved, Mammoth pauses the update and asks you, so your data is never changed silently. Click **Create dataset** (or **Create dataset + automation** when you set up automatic refresh). Click **Back** to return to the tables. In the footer of the review modal, the **Delete file after tables are converted into datasets** checkbox removes the source file from your Data Library once the datasets are created. It is useful for keeping your library clean when processing many files. Each selected table becomes a separate dataset in your Data Library. Once created, the dataset works exactly like any other Mammoth dataset—you can transform, view, share, and connect it to pipelines. ## Example PDF extraction prompts ### Invoice processing *"Extract invoice number, vendor name, invoice date, due date, and total amount from this supplier invoice"* ### Report data collection *"Extract the department name, report period, and all KPI values from this monthly performance report"* ### Form processing *"Extract applicant name, years of experience, current employer, and desired salary"* ### Bank statement reconciliation *"Extract statement date, beginning balance, ending balance, total deposits, and total withdrawals"* ### Contract data *"Extract party names, effective date, contract value, and termination clause from this agreement"* ### Research table extraction *"Extract all data from the results table on page 3—include the variable name, N, mean, and standard deviation columns"* ## Troubleshoot PDF extraction ### Extract Data is restricted PDF extraction depends on your plan. Follow the upgrade prompt, or ask your workspace admin. ### Extraction returns incomplete or incorrect data - Refine your instruction to be more specific—mention the page number, table header text, or exact column names - Try **Only tables** if the document has clearly formatted tables - For scanned PDFs, higher image quality yields better results ### No tables found message appears The extraction completed but found nothing matching your choice. Try: - Switching from **Only tables** to **All content** - Broadening your **Custom** instruction—for example, remove page number restrictions - Checking the file preview on the left to confirm the expected content is visible ### Some pages were not extracted Some pages had more data than your plan can extract. Use the **Upgrade your plan** link in the message to extract larger pages. ### Quota error from your AI provider key Mammoth shows "Your key has insufficient quota, no tables could be extracted. Please update your key or check your usage limits." If some tables were extracted first, it says so. Update the key or check your usage limits with your AI provider, then extract again. ### Extraction takes a long time Large or complex PDFs can take a while to process, and multi-page scanned documents take longest. If it takes longer than Mammoth can wait, Mammoth says the extraction may still finish—reopen the file in a few minutes to see the result. ### Mammoth could not find the extraction in progress Mammoth shows "We couldn't find the extraction that was in progress. Please try again." Start the extraction again. ### TIFF, HEIC, or WebP files not extracting These formats are supported but confirm the file is not corrupted or unusually compressed. If the extraction fails consistently, try converting to PDF or PNG first. ### Extraction fails with an error - The document may use non-standard fonts or be heavily image-based—try re-scanning at higher resolution or converting to a text-based PDF --- # PostgreSQL connector URL: https://mammoth.io/docs/learn/connectors/postgresql-connector/ · Updated: 2026-11-02 Connect Mammoth to PostgreSQL: what you need, how to enter credentials, and how to import a table or custom SQL query as a dataset. The PostgreSQL connector imports data from your PostgreSQL database into Mammoth as a dataset. You can import tables directly or write custom SQL queries to select specific rows and columns. When enabled for your workspace, AI query generation creates SQL from plain-language descriptions; you can also edit queries manually. You can refresh the dataset manually or on a schedule. ## Before you start You need: - A PostgreSQL server accessible from the internet - A database user with `SELECT` permission on the tables you want to import - Your server's hostname or IP address, port (default: 5432), database name, username, and password - Mammoth's IP address added to your PostgreSQL firewall allowlist—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) ## Step 1: Select the PostgreSQL connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **PostgreSQL** 4. Click the **PostgreSQL** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. ![PostgreSQL New Connection form with Host URL, Port, Username, Password, Database, and Display Name fields](https://mammoth.io/docs/images/20260615_103344_Screenshot2026-05-221755361.webp) Fill in the following fields: | Field | Description | Example | | --- | --- | --- | | **Host URL** | Hostname or IP address of your PostgreSQL server | `analytics-prod.example.com` | | **Port** | TCP port PostgreSQL listens on | `5432` (default) | | **Username** | Database user with SELECT access | `mammoth_reader` | | **Password** | Password for the database user |—| | **Database** | Name of the database to connect to | `analytics_prod` | | **Display Name** | Optional label for this connection in Mammoth | `Postgres Production` | > **Mammoth needs network access.** > Your PostgreSQL server must allow inbound connections from Mammoth's IP address, which the connection form shows. See [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) for firewall configuration steps. After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. --- ## Step 3: Query your PostgreSQL data After connecting, your connection appears under **Existing Connections**. Select it to open the query builder, which has a table browser and two options for specifying your data: ### Select a PostgreSQL schema PostgreSQL databases can have multiple schemas (the default is `public`). Mammoth lists them under **Schema** below your connection; click the schema that contains your tables. If the database has only one schema, Mammoth opens it automatically. ### Browse and select PostgreSQL tables The **List of tables** panel lists all tables in the selected schema. Click a table name to load a `SELECT *` query for it and its preview. ### Generate a PostgreSQL query with AI When enabled for your workspace, the **Describe the data you need...** box appears above the query editor. Use it to tell Mammoth what you want in plain language—for example, *"all completed orders in the last 90 days"*—and click the generate button. Mammoth writes the SQL query based on your table structure and description. The box is disabled while Mammoth sets up metadata for AI query. ### Write a custom PostgreSQL query Alternatively, write or edit SQL directly in the **Enter SQL query** field to filter rows, join tables, or select specific columns: ```sql SELECT order_id, customer_id, amount, created_at FROM orders WHERE created_at >= NOW() - INTERVAL '90 days' AND status = 'completed' ``` Click **Run** to execute and preview the results. ![PostgreSQL New Dataset dialog with table list, SQL query, data preview, Save table as field, and Save as dataset button](https://mammoth.io/docs/images/20260615_103405_Screenshot2026-05-221757111.webp) See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide to the preview screen. ## Step 4: Save the PostgreSQL dataset When the preview looks correct: 1. Enter a **dataset name** in the **Save table as** field (e.g., *"PostgreSQL Orders"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** Your dataset appears in the Data Library and is ready to use in pipelines and dashboards. ## Keep PostgreSQL data up to date To refresh your PostgreSQL dataset on a schedule, create a **Dataset Refresh** automation. This re-runs your query and updates the dataset according to your update method. You can also run it manually. ## Troubleshoot PostgreSQL connections ### Connection fails - Confirm Mammoth's IP address is in your PostgreSQL allowlist (`pg_hba.conf` and any cloud security group) - Check the hostname and port are correct - Verify the database user can connect from an external host (not just `localhost`) ### No tables appear in the table browser - Your database user may lack `SELECT` permission—run `GRANT SELECT ON ALL TABLES IN SCHEMA public TO your_user;` - Verify the database connection succeeded and the database user has access to your tables ### Query returns unexpected results - Test the query directly in your PostgreSQL client before running it in Mammoth - Check for timezone differences if filtering by date --- # REST API URL: https://mammoth.io/docs/learn/connectors/rest-api/ · Updated: 2026-11-02 Connect Mammoth to any HTTP or HTTPS JSON endpoint with the REST API connector: authenticate, set a data root path, paginate, test, and save a dataset. The REST API connector imports data from any HTTP/HTTPS JSON endpoint into Mammoth as a dataset. Unlike other connectors that authenticate to a specific service, this connector lets you connect to any REST API endpoint—internal services, SaaS APIs, custom backends, or public data sources. Setting up a REST API connection defaults to an **AI-assisted chat**: describe the API in plain language and Mammoth's assistant asks for the URL, credentials, and other details it needs, testing the connection as it goes. A **Classic form** is also available if you'd rather fill in every field yourself—click **Classic form** at any point during the chat to switch. ## Before you start You need: - The **base URL** of the API you want to connect to (e.g., `https://api.example.com`) - **Authentication credentials** if the API requires them (API key, Bearer token, Basic auth credentials, or an OAuth 2.0 app's client ID and secret) - Knowledge of the API endpoint path and expected response structure ## Step 1: Select the REST API connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **REST API** 4. Click the **REST API** tile ![New Dataset dialog with Connectors selected, REST API typed in search, and the REST API tile shown](https://mammoth.io/docs/images/20260826_100621_RestAPI-Card.webp) ## Step 2: Set up the connection with the AI assistant (default) By default, Mammoth opens a chat panel—**Mammoth Analytics AI Assistance**—instead of a static form. ![REST API AI assistant chat with a message box, example chips (Jira, GitHub, NASA API), and a Classic form link](https://mammoth.io/docs/images/20260826_100913_RestAPI-Connectionscreen.webp) 1. Type what you want to connect to and why—for example, *"Connect to the NASA API and pull the astronomy picture of the day"*—or click one of the example chips (**Jira**, **GitHub**, **NASA API**, **Custom REST API**) to start from a template 2. The assistant asks follow-up questions as needed (base URL, endpoint, auth type) and may show an inline **credential form** in the chat when it needs a key, token, or username/password—fill it in and click **Submit** without leaving the conversation 3. For OAuth-based APIs, the assistant shows an **Authorize Access** button that sends you to the provider's login in the same browser tab; once you approve access, you return to Mammoth and the chat resumes 4. The assistant tests the connection and endpoint for you—messages such as "Connection test passed" or "Connection test failed" and "Endpoint test passed" or "Endpoint test failed" appear inline, along with a **Sample data** preview when the test succeeds 5. If you already have a saved REST API connection, the assistant may show a **connection picker** so you can reuse it, or click **Connect new account** to create a new one 6. Once the assistant confirms the setup, it may ask you to choose which columns to keep (**Select columns to import**). Click **Apply**, or **Skip / Keep all** to keep every column 7. Click **Done** once the dataset is created > **Tip: Switch to the classic form anytime.** > Click **Classic form** in the chat panel to switch to the traditional field-based setup described below instead—useful if you already know the exact configuration and want to skip the conversation. ## Step 3: Or configure the connection manually (classic form) Click **Classic form** to open the field-based connection setup instead of the AI chat. The **REST API - New Connection** dialog opens. ![REST API New Connection form with Base URL, Display Name, six authentication type tabs including OAuth 2.0 Client Credentials, and Advanced Settings](https://mammoth.io/docs/images/20261009_182028_Connector-RestAPI-ClassicForm.webp) ### Basic settings | Field | Description | Example | | --- | --- | --- | | **Base URL** | The root URL for all requests—endpoint paths are appended to this | `https://api.example.com/v2` | | **Display Name** | A label for this connection (defaults to the Base URL if left blank) | `Example API` | ### Authentication Select the authentication type used by your API: | Auth Type | When to use | Fields required | | --- | --- | --- | | **No Authentication** | Public APIs with no authentication |—| | **API Key** | APIs that accept a key in a header or query parameter | Key Name and Key Value (Param Name and Param Value for a query parameter); choose **Header** or **Query Parameter** | | **Bearer Token** | APIs that use `Authorization: Bearer ` | Bearer Token | | **Basic Auth** | APIs that use HTTP Basic authentication | Username and Password | | **OAuth 2.0 Authorization Code** | APIs that require a full OAuth 2.0 login flow | Client ID, Client Secret, Authorization URL, Token URL, and optional Scopes | | **OAuth 2.0 Client Credentials** | Server-to-server APIs that issue a client ID and secret | Client ID, Client Secret, Token URL, and optional Scopes | ### API Key placement - **Header**—sends the key as a request header (for example, `X-API-Key: your-key-here`) - **Query Parameter**—appends the key to the URL (for example, `?api_key=your-key-here`) **OAuth 2.0 Authorization Code** adds three extra fields under **Advanced Settings**: **Redirect URI** (defaults to `https://redirect.mammoth.io/redirect/oauth2` if left blank), a **Client Auth Method** selector (**Client Secret POST** or **Client Secret Basic**), and a **Use PKCE (Proof Key for Code Exchange)** toggle for providers that require or support PKCE. Clicking **Connect** with this auth type sends you to the provider's login page in the same browser tab rather than saving immediately. **OAuth 2.0 Client Credentials** has no browser sign-in: Mammoth requests the access token from the Token URL. ### Advanced settings (optional) Expand **Advanced Settings** to configure: | Setting | Description | Default | | --- | --- | --- | | **Timeout (sec)** | How long Mammoth waits for a response before timing out | 30 | | **Rate Limit (req/s)** | Maximum requests per second to send (helps avoid API rate limits) | Unlimited | | **Verify SSL Certificate** | Verify the server's SSL certificate | Enabled | Click **Connect** to save the connection (or to start the OAuth redirect, for OAuth 2.0 Authorization Code). If saving fails, the error message appears at the bottom of the dialog. ## Step 4: Configure the REST API endpoint After saving the connection, select it under **Existing Connections**. The **Endpoint Configuration** screen opens, where you configure the specific endpoint to import data from. ### Endpoint settings | Field | Description | Example | | --- | --- | --- | | **Endpoint Path** | The path appended to your base URL | `/users` or `/reports/daily` | | **HTTP Method** | The request method | GET (default) or POST | | **Request Body** | JSON body for POST requests | `{"start": "2024-01-01"}` | Mammoth shows the full URL (base URL plus endpoint path) in a callout as you type the endpoint path. ### Data root path The **Data Root Path** tells Mammoth where to find the array of records within the JSON response. Most APIs return data nested inside a wrapper object. | Response structure | Data Root Path | | --- | --- | | Top-level array: `[{...}, {...}]` | `$` (default) | | Nested: `{"data": [{...}, {...}]}` | `$.data` | | Deeply nested: `{"result": {"items": [...]}}` | `$.result.items` | After testing the endpoint, Mammoth suggests available root paths based on the actual response structure—click a suggestion to apply it automatically. ### Flatten nested JSON The **Flatten Nested JSON** toggle (enabled by default) converts nested objects into flat columns using dot notation. For example, a field `{"address": {"city": "NYC"}}` becomes a column named `address.city`. ## Step 5: Configure REST API pagination (optional) If the API returns data across multiple pages, configure pagination so Mammoth fetches all records. ![REST API pagination options (No Pagination, Offset, Cursor, Page #, Link) above Save as Dataset with a Test button](https://mammoth.io/docs/images/20260826_101221_RestAPI-Paginationoptions.webp) Select a pagination type: | Type | Use when | Required settings | | --- | --- | --- | | **No Pagination** | API returns all data in one response | — | | **Offset** | API uses `limit` and `offset` query parameters | Page Size (default 100) | | **Cursor** | API returns a cursor token for the next page | Cursor Path (where to find the next cursor in the response) | | **Page #** | API uses a `page` query parameter | Page Size (default 100) | | **Link** | API returns pagination links in the `Link` HTTP header (RFC 5988) |—| ### Advanced pagination settings Click **Advanced options** to expand: - **Limit Param** and **Offset Param**—customize if the API uses non-standard names (for example, `count` instead of `limit`) - **Cursor Param**—customize the query parameter name for the cursor value - **Page Param**—customize the query parameter name for the page number - **Max Pages**—set a limit to stop fetching after N pages (useful for large datasets during testing). Leave it empty to fetch all pages ## Step 6: Test and save the REST API dataset Click **Test** to run a sample request. Mammoth shows: - The HTTP status code (for example, `200 OK`) - A success or error message - **Suggested data paths:** based on the response—click one to use it as the Data Root Path In the **Save as Dataset** section, enter a name in **Save table as**, choose an **Update Method** (**Replace all data** or **Add new data**), and click **Save as dataset**. The dataset appears in the **Data Library**. ## REST API configuration examples ### Public API with no auth ```plaintext Base URL: https://api.open-meteo.com Endpoint Path: /v1/forecast?latitude=40.71&longitude=-74.01&hourly=temperature_2m Data Root Path: $.hourly Pagination: No Pagination ``` ### SaaS API with a Bearer token and cursor pagination ```plaintext Base URL: https://api.example.com/v2 Auth: Bearer — your-token-here Endpoint Path: /events Data Root Path: $.data Pagination: Cursor — cursor path: $.next_cursor ``` ### Internal API with an API key header and offset pagination ```plaintext Base URL: https://internal.mycompany.com/api Auth: API Key → Header → X-API-Key: secret-key Endpoint Path: /records Data Root Path: $.results Pagination: Offset — page size: 500 ``` ## Troubleshoot REST API connections ### Test returns 401 or 403 - Check the authentication type and credentials are correct - For API Key auth, confirm whether the key should go in a **Header** or **Query Parameter**—check your API documentation ### The request times out - The API may be slow to respond—increase the **Timeout (sec)** value in Advanced Settings - Check that the Base URL is reachable from the internet (some internal APIs require VPN or IP whitelisting) ### Data root path not found - Use the suggested paths shown after a successful test - Check the raw JSON response structure in your API documentation or test the endpoint in a tool like Postman first ### Only partial data imported - If the API uses non-standard parameter names (for example, `count` instead of `limit`), click **Advanced options** under Pagination and update the parameter names to match - Set **Max Pages** to a small number (for example, 5) to verify pagination is working before importing the full dataset ### SSL certificate error - Disable **Verify SSL Certificate** in Advanced Settings if you're connecting to an internal API with a self-signed certificate --- # Salesforce connector URL: https://mammoth.io/docs/learn/connectors/salesforce-connector/ · Updated: 2026-11-02 Connect Mammoth to Salesforce with OAuth for production, sandbox, or custom-domain orgs, query objects with SQL, and save the results as a dataset. The Salesforce connector imports CRM data from your Salesforce org into Mammoth as a dataset. Authenticate with OAuth using your Salesforce credentials—you enter the login URL of your org, so production orgs (`https://login.salesforce.com`) and sandboxes (`https://test.salesforce.com`) are both supported. ## Before you start You need: - A Salesforce account with API access enabled for your user - Your Salesforce login URL—`https://login.salesforce.com` for production, or your sandbox URL (for example, `https://test.salesforce.com`) ## Step 1: Select the Salesforce connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Salesforce** 4. Click the **Salesforce** tile ## Step 2: Authenticate with Salesforce The Salesforce connector asks for your instance URL before opening the OAuth flow. ![Salesforce New Connection form with the Instance URL (Domain) field filled in and a Connect button](https://mammoth.io/docs/images/20260826_105406_salesforce_connection.webp) 1. In the **Instance URL (Domain)** field, enter your Salesforce login URL. It is pre-filled with `https://login.salesforce.com`: - **Production:** `https://login.salesforce.com` (default) - **Sandbox:** `https://test.salesforce.com` - **Custom domain:** `https://mycompany.my.salesforce.com` 2. Click **Connect**—Mammoth sends you to your Salesforce login page in the same browser tab 3. Sign in with your Salesforce credentials and click **Allow** to authorize Mammoth 4. You're redirected back to Mammoth automatically with the connection active > **Tip: Sandbox vs production.** > If you're connecting to a sandbox, change the instance URL to `https://test.salesforce.com` before clicking **Connect**. The sandbox URL differs from your production org—check with your Salesforce admin if unsure. ## Step 3: Select a Salesforce object and query your data After authenticating, select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom Salesforce query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide to the preview screen. ## Step 4: Save the Salesforce dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., *"Salesforce Contacts"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Keep Salesforce data up to date Set up a **Dataset Refresh** automation to re-import your Salesforce data on a schedule. ## Troubleshoot Salesforce connections ### Authorization does not complete - Mammoth sends you to Salesforce in the same browser tab and returns you to Mammoth afterwards. If you close the tab or deny access, start the connection again - Confirm the **Instance URL (Domain)** matches the org you sign in to (production or sandbox) - Confirm with your Salesforce admin that API access is enabled for your user ### Table not visible in the list - The authenticated user may not have permission to see the object in Salesforce. Ask your Salesforce admin to check the user's object and field permissions. --- # SAP HANA connector URL: https://mammoth.io/docs/learn/connectors/sap-hana-connector/ · Updated: 2026-11-02 Connect Mammoth to SAP HANA: required credentials, port guidance, how to create a connection, and how to import a table or SQL query as a dataset. The SAP HANA connector imports data from your SAP HANA database into Mammoth as a dataset. Browse tables directly or write custom SQL queries, with AI-assisted query generation from a plain-language description when it is enabled for your workspace. ## Before you start You need: - An SAP HANA instance reachable from the internet - A HANA user with `SELECT` access to the schemas and tables you want to import - Your HANA server's **Host URL**, **Port**, **Username**, **Password**, and **Database** name - Mammoth's IP address added to your HANA instance's allowed inbound list—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) > **Tip: Confirm your port with your HANA administrator.** > The connection form pre-fills **Port** with `443`, but that's a generic default, not a HANA-specific one. Many on-premises SAP HANA instances listen on a port in the `315` range instead (for example, `30015` for instance `00`). Ask your HANA administrator for the correct port rather than assuming `443` will work. ## Step 1: Select the SAP HANA connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **SAP HANA** or find it in the **Databases** category 4. Click the **SAP HANA** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. | Field | Description | Example | | --- | --- | --- | | **Host URL** | Hostname or IP address of your SAP HANA server | `hana-prod.example.com` | | **Port** | TCP port your HANA instance listens on | Confirm with your HANA admin—see tip above | | **Username** | HANA user with `SELECT` access | `MAMMOTH_READER` | | **Password** | Password for the HANA user |—| | **Database** | Name of the HANA database to connect to | `PROD` | | **Display Name** | Optional label for this connection in Mammoth | `HANA Production` | A callout below the fields reminds you to whitelist Mammoth's IP address in your database settings—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) for the exact address to use. After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. ## Step 3: Select a SAP HANA profile and query your data Once connected, select the connection under **Existing Connections**. Mammoth lists the schemas in your HANA database as **Profile** entries. Click a profile to browse the tables in that schema—a profile in this connector corresponds to a HANA schema, even though the list is labeled "Profile" rather than "Schema." ### Browse SAP HANA tables Click any table in the **List of tables** panel to load a preview query using double-quoted identifiers, HANA style: `SELECT * FROM "schema"."table"`. ### Generate a SAP HANA query with AI When enabled for your workspace, SAP HANA shows the **Describe the data you need...** AI query box above the query editor. Describe the data you need—for example, *"all orders completed in the last 90 days"*—and click the generate button. The box is disabled while Mammoth sets up metadata for AI query. ### Write a custom SAP HANA query ```sql SELECT "ORDER_ID", "CUSTOMER_ID", "AMOUNT", "ORDER_DATE" FROM "SALES"."ORDERS" WHERE "ORDER_DATE" >= ADD_DAYS(CURRENT_DATE, -90) AND "STATUS" = 'COMPLETED' ``` Query validation supports only `SELECT` statements. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide to the preview screen. ## Step 4: Save the SAP HANA dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Allow Mammoth in your SAP HANA network settings Add Mammoth's IP address to your SAP HANA instance's allowed inbound connections. See [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) for the current IP address and configuration steps. ## Troubleshoot SAP HANA connections ### Connection fails - Confirm the port with your HANA administrator—see the tip in [Before you start](#before-you-start) - Verify Mammoth's IP address is whitelisted in your HANA network settings - Check the username and password are correct for the target database ### HANA error codes The message "HANA Error Code {code}: {description}" is passed through directly from the HANA driver. The `{code}` and `{description}` identify the specific HANA-side error (for example, invalid object name or insufficient privileges)—use them to look up the issue in SAP's HANA documentation or check with your HANA administrator. ### No tables appear after selecting a profile Your HANA user may lack `SELECT` privileges on that schema. Ask your HANA administrator to grant access to the relevant schema and tables. ### Query returns a column ambiguity error Qualify column names with their table or alias (for example, `"o"."ORDER_ID"` instead of `"ORDER_ID"`) when your query joins multiple tables. --- # SendGrid connector URL: https://mammoth.io/docs/learn/connectors/sendgrid-connector/ · Updated: 2026-11-02 Connect Mammoth to SendGrid with a restricted API key, query email delivery tables with SQL, and save the results as a dataset. The SendGrid connector imports email delivery data from your SendGrid account into Mammoth as a dataset. Authentication uses a SendGrid API key—no OAuth flow required. ## Before you start You need: - A SendGrid account - A SendGrid **API key** with read access to the data you want to import ### Create a SendGrid API key 1. In SendGrid, go to **Settings → API Keys** 2. Click **Create API Key** 3. Give it a name (e.g., `Mammoth Integration`) 4. Under **API Key Permissions**, select **Restricted Access** 5. Grant read access to the data you want to import 6. Click **Create & View** and copy the API key—it won't be shown again ## Step 1: Select the SendGrid connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **SendGrid** or find it in the **CRM & Marketing** category 4. Click the **SendGrid** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. ![SendGrid New Connection form with API Secret and Name fields and a notice to whitelist Mammoth's IP address](https://mammoth.io/docs/images/20260826_114343_SendGrid_connection.webp) | Field | Description | | --- | --- | | **API Secret** | Your SendGrid restricted API key (the form labels this field "API Secret") | | **Name** | A label for this connection (required) | A callout below the fields shows Mammoth's IP address and reminds you to whitelist it if your SendGrid account restricts API access by IP—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/). Click **Connect**. Mammoth validates the API key and saves the connection; if validation fails, the error message appears at the bottom of the form. ![SendGrid Existing Connections list showing one saved connection and the New Connection button](https://mammoth.io/docs/images/20260826_114450_sendgrid_identity_created.webp) ## Step 3: Select SendGrid data and query Select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom SendGrid query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. ![SendGrid New Dataset dialog with the Alerts table selected, a SELECT query, data preview, and Save as dataset button](https://mammoth.io/docs/images/20260826_114423_Sendgrid_table_selected.webp) See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the SendGrid dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., *"SendGrid Email Stats"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Allow Mammoth's IP address in SendGrid If your SendGrid account restricts API access by IP, add Mammoth's IP address, shown on the connection form, to the allowed list—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/). ## Troubleshoot SendGrid connections ### Authentication fails - Mammoth shows `Entered api key is not valid, Please enter the valid api key` when the key is rejected - Confirm the API key is copied completely (they're long strings) - Check the API key permissions include access to the data you're trying to query --- # SFTP connector URL: https://mammoth.io/docs/learn/connectors/sftp/ · Updated: 2026-11-02 Connect Mammoth to an SFTP server using a password, a Mammoth-generated SSH key, or your own private key, then import a file and set up refreshes. The SFTP connector imports files from any SFTP-compatible file server into Mammoth as a dataset. Mammoth supports three authentication methods: **username & password**, **SSH key generation** (Mammoth-hosted), and **private key authentication** (user-provided). Supports a wide range of file formats including CSV, Excel, and compressed archives. ## Before you start You need: - An SFTP server accessible from the internet - A user account with read access to the files you want to import - Your server's hostname or IP address and port (default: 22) - Mammoth's IP address added to your server's firewall allowlist (shown in the connection form) - One of three authentication methods: - **Username & password**—Your SFTP user's password - **SSH Key**—Mammoth generates a public key that you add to your server - **Private Key**—Your existing SSH private key in PEM format ## Step 1: Select the SFTP connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **SFTP** or find it in the **Cloud Storage** category 4. Click the **SFTP** tile ## Step 2: Create a connection Click **New Connection** and select an authentication method. The SFTP connector supports three authentication approaches: ### Method 1: Username & password Select **Username & Password** for straightforward password-based authentication. ![SFTP New Connection form with Username & Password selected and Host, Port 22, Username, Password, and Display Name fields](https://mammoth.io/docs/images/20260826_102031_Screenshot2026-05-221822431.webp) | Field | Description | Example | | --- | --- | --- | | **Host** | Hostname or IP address of your SFTP server | `sftp.example.com` | | **Port** | SFTP port | `22` (default) | | **Username** | SFTP user with read access | `mammoth_user` | | **Password** | Password for the SFTP user |—| | **Display Name** | Optional label for this connection | `SFTP Production` | Fill in the fields and click **Connect**. ### Method 2: SSH key (Mammoth-generated) Select **SSH Key** to have Mammoth generate a unique SSH public key that you'll add to your server. This method has no private key to manage—only the public key you install on the SFTP server. ![SFTP New Connection form with SSH Key selected, showing Host, Port, Username, Display Name, and Generate SSH Key button](https://mammoth.io/docs/images/20260826_102052_Screenshot2026-05-221824461.webp) | Field | Description | | --- | --- | | **Host** | Hostname or IP of your SFTP server | | **Port** | SFTP port (default: 22) | | **Username** | SFTP user with read access | | **Display Name** | Optional label for this connection | After filling in the fields, click **Generate SSH Key**. Mammoth creates a unique public key and displays it. Click **Copy SSH Key** or **Download key**, then add it to your SFTP server's `~/.ssh/authorized_keys` file (on the line for your SFTP user). Once the key is installed on the server, return to Mammoth and click **Back to Existing Connections**, then select the connection to continue. > **Tip: Downloading the SSH public key.** > On the key screen, you can copy the key to your clipboard with **Copy SSH Key** or download it as a `.pub` file with **Download key** for easy transfer to your server. ### Method 3: Private key (user-provided) Select **Private Key** if you already have an SSH private key and want Mammoth to use it for authentication. ![SFTP New Connection form with Private Key selected, showing Host, Port, Username, Display Name, and PEM key text area](https://mammoth.io/docs/images/20260826_102123_Screenshot2026-05-221825101.webp) | Field | Description | | --- | --- | | **Host** | Hostname or IP of your SFTP server | | **Port** | SFTP port (default: 22) | | **Username** | SFTP user with read access | | **Private Key (PEM format)** | Your SSH private key in PEM format (`-----BEGIN RSA PRIVATE KEY-----` ... `-----END RSA PRIVATE KEY-----`) | | **Passphrase** | Optional passphrase for the private key (if your key is encrypted) | | **Display Name** | Optional label for this connection | Paste your private key directly in the **Private Key (PEM format)** text area, or click **Upload key file** to select a `.pem` or `.key` file from your computer. If your key is passphrase-protected, enter the passphrase. Click **Connect** to save the connection. > **Warning: Private key security.** > Never share your private key or commit it to version control. If you believe your key is compromised, remove it from your SFTP server's authorized keys immediately. --- ### SFTP firewall note The connection form shows a message at the bottom: "Mammoth connects from IP [address]. Add it to your server's allowlist if needed." Allow that IP through your firewall for the connection to succeed. ## Step 3: Select your SFTP file After connecting, select the connection under **Existing Connections**, then browse to the file on the SFTP server using the file browser. ### Supported SFTP file formats `.txt` · `.csv` · `.tsv` · `.psv` · `.xls` · `.xlsx` · `.zip` · `.bz2` · `.gz` · `.tar` · `.7z` ### Choose a future pulls mode After you select a file, a **Future pulls mode** list appears: - **Pull same file**—Every refresh re-reads the file you selected - **Pull next file based on name pattern**—Available only when a single file is selected. Every refresh looks for the next file that matches a date pattern in the file name. Choose the **Folder to pull from** and enter a **File pattern**. For example, for the file `sftp_Tue-01-November-2022_daily.csv` the pattern is `sftp_-
--_daily.csv` In a file pattern, put a date format inside `<>`. The supported formats are `dd`, `mm`, `yyyy`, `yy`, `month`, `mon`, `day`, `dy`, `hh`, `mi`, and `ss`, in full lower case, upper case, or capitalized. The selected file name must contain at least one date format, and the pattern must match the selected file name. If the file is an Excel workbook (`.xls`/`.xlsx`), also enter the **Exact Sheet name** to import. ![SFTP New Dataset dialog with Exact Sheet name, Future pulls mode set to name pattern, Folder to pull from, and File pattern](https://mammoth.io/docs/images/20260826_102259_Screenshot2026-05-221846531.webp) ## Step 4: Create the SFTP dataset Click **Create new dataset**. Mammoth does not ask you to choose an update method for this connector. ## Keep SFTP data up to date For files that update regularly on your SFTP server, set up a **Dataset Refresh** automation. When the automation runs, Mammoth re-reads the file from the SFTP server. If your SFTP server delivers files with date-stamped names (for example, `orders_20240115.csv`), choose **Pull next file based on name pattern** when you create the dataset so each refresh picks up the next matching file. ## Troubleshoot SFTP connections ### Connection fails - Confirm port 22 (or your custom port) is open inbound from Mammoth's IP address (shown on the connection form) - Verify the host, port, and username are correct - For **Username & Password**: confirm the password is correct - For **SSH Key**: verify the public key is installed at `~/.ssh/authorized_keys` on the server under the SFTP user's home directory - For **Private Key**: confirm the key is in valid PEM format and the passphrase (if set) is correct; verify the corresponding public key is in `~/.ssh/authorized_keys` on the server ### Permission denied on file - The SFTP user must have read access to the target file and list access to the containing directory - Check file permissions with `ls -la` on the server, and adjust with `chmod` if needed ### Invalid private key format The error "Invalid private key format. Please provide a valid PEM-encoded key." means Mammoth could not read the key: - Ensure the private key is a PEM-encoded key (it begins with a `-----BEGIN ... PRIVATE KEY-----` line) - Check that the entire key, including the `-----BEGIN` and `-----END` lines, is pasted into the form - Uploaded key files can't exceed the maximum allowed size for an SSH private key (16 KB); Mammoth shows "File exceeds the maximum allowed size for an SSH private key." --- # SharePoint connector URL: https://mammoth.io/docs/learn/connectors/sharepoint-connector/ · Updated: 2026-11-02 Connect Mammoth to SharePoint Online with Azure app credentials, browse a document library, and import a file as a dataset. The SharePoint connector imports files from **Microsoft SharePoint Online** document libraries into Mammoth as datasets. Authentication uses Azure app credentials (Tenant ID, Client ID, Client Secret)—this is an app-level connection, not tied to an individual user account. ## Before you start You need to register an **Azure Active Directory app** with Microsoft Graph access to the target SharePoint site. This is a one-time setup done by a Microsoft 365 admin. ### Register the Azure AD app 1. Go to [Azure Portal](https://portal.azure.com) → **Azure Active Directory → App registrations** 2. Click **New registration**—name it (e.g., `Mammoth SharePoint`) and click **Register** 3. Copy the **Application (client) ID**—this is your **Client ID** 4. Copy the **Directory (tenant) ID**—this is your **Tenant ID** 5. Go to **Certificates & secrets → New client secret**, add a description, set an expiry, and click **Add** 6. Copy the secret **Value** immediately (it won't be shown again)—this is your **Client Secret** 7. Go to **API permissions → Add a permission → Microsoft Graph → Application permissions** 8. Add `Sites.Read.All` (or `Sites.Selected` for tighter scope) 9. Click **Grant admin consent** ## Step 1: Select the SharePoint connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **SharePoint** or find it in the **Cloud Storage** category 4. Click the **SharePoint** tile ## Step 2: Create a connection Click **New Connection** to open the credential form. | Field | Description | Example | | --- | --- | --- | | **Server URL** | Your SharePoint site URL | `https://mycompany.sharepoint.com/sites/Analytics` | | **Tenant ID** | Azure AD Directory (tenant) ID | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` | | **Client ID** | Azure AD Application (client) ID | `yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy` | | **Client Secret** | The app secret value you created |—| All four fields are required. Click **Connect** once they're filled in—there's no OAuth sign-in step, since the connector authenticates directly with the app credentials above. If validation fails, the error message appears at the bottom of the form. ## Step 3: Select your SharePoint file After connecting, select the connection under **Existing Connections**, then browse the SharePoint document library file tree to find your file. ### Supported SharePoint file formats `.txt` · `.csv` · `.tsv` · `.psv` · `.xls` · `.xlsx` · `.xml` · `.zip` · `.bz2` · `.gz` · `.tar` · `.7z` ## Step 4: Create the SharePoint dataset Click **Create new dataset**. Mammoth does not ask you to choose an update method for this connector. To keep the dataset in sync as the source file changes, set up a **Dataset Refresh** automation. ## Troubleshoot SharePoint connections ### Authentication fails - Check all four values (Server URL, Tenant ID, Client ID, Client Secret) are copied correctly—GUIDs are case-insensitive but must be complete - Confirm admin consent has been granted for the API permissions ### Client secret expired - Client secrets expire based on the duration you set during creation—generate a new secret in Azure Portal and update the connection in Mammoth ### Permission denied accessing files - Confirm `Sites.Read.All` (or `Sites.Selected` with the correct site) has been granted with admin consent --- # Shopify connector URL: https://mammoth.io/docs/learn/connectors/shopify-connector/ · Updated: 2026-11-02 Connect Mammoth to Shopify with OAuth and your .myshopify.com store URL, query store tables with SQL, and save the results as a dataset. The Shopify connector imports e-commerce data from your Shopify store into Mammoth as a dataset. Authenticate with OAuth using your Shopify store URL. ## Before you start You need: - A Shopify store - A Shopify account that is allowed to authorize third-party app access to the store ## Step 1: Select the Shopify connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Shopify** 4. Click the **Shopify** tile ## Step 2: Enter your store URL Before the OAuth flow begins, Mammoth asks for your Shopify store URL. ![Shopify New Connection form with a Shop URL field and a Connect button](https://mammoth.io/docs/images/20260826_114855_styled1.webp) | Field | Description | Example | | --- | --- | --- | | **Shop URL** | Your Shopify store's `.myshopify.com` URL, including `https://` | `https://mystore.myshopify.com` | Enter your store URL—use the `.myshopify.com` format, not a custom domain. Then click **Connect** to start the OAuth flow. If the value isn't a valid URL, Mammoth shows "Please enter a valid URL". ## Step 3: Authorize in Shopify Mammoth sends you to your Shopify store's authorization page in the same browser tab. Review the requested permissions and authorize Mammoth. You're redirected back to Mammoth automatically with the connection active. > **Tip: Finding your .myshopify.com URL.** > Every Shopify store has a permanent `.myshopify.com` URL, even if you use a custom domain. It's the domain Shopify lists as your "myshopify.com domain." ## Step 4: Select Shopify data and query Select the connection under **Existing Connections** to open the query builder. The **List of tables** panel shows the tables this connector exposes. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom Shopify query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 5: Save the Shopify dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., *"Shopify Orders 2024"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Keep Shopify data up to date Set up a **Dataset Refresh** automation to re-import your Shopify data on a schedule. For large stores, you can choose the **Add new data** update method with a **Key column** (a numeric or date column with incrementing values) so each refresh adds only new records instead of replacing the full dataset. ## Troubleshoot Shopify connections ### Authorization does not complete - Mammoth sends you to Shopify in the same browser tab and returns you to Mammoth afterwards. If you close the tab or deny access, start the connection again - Confirm you entered the `.myshopify.com` URL, not your custom domain (for example, use `https://mystore.myshopify.com`, not `www.mystore.com`) ### Your account cannot authorize the app - Ask the store owner to authorize Mammoth, or to give your Shopify account permission to authorize third-party apps. --- # Snowflake connector URL: https://mammoth.io/docs/learn/connectors/snowflake-connector/ · Updated: 2026-11-02 Connect Mammoth to Snowflake: required credentials and permissions, how to create a connection, and how to import a table or SQL query as a dataset. The Snowflake connector imports data from your Snowflake cloud data warehouse into Mammoth as a dataset. Select tables from any schema or write custom SQL queries. ## Before you start You need: - A Snowflake account with a warehouse and database you want to query - A Snowflake user with at minimum `USAGE` on the warehouse and database, and `SELECT` on the relevant schemas and tables - Your Snowflake **Host URL**, **Username**, **Password**, **Database**, **Warehouse**, **Account**, and **Role Name** (all are required) - Mammoth's IP address added to your Snowflake network policy, if your account uses one—see [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) ## Step 1: Select the Snowflake connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Snowflake** 4. Click the **Snowflake** tile --- ## Step 2: Create a connection Click **New Connection** to open the credential form. ![Snowflake New Connection form with Host URL, Username, Password, Database, Warehouse, Account, and Role Name fields](https://mammoth.io/docs/images/20260826_115248_styled2.webp) | Field | Description | Example | | --- | --- | --- | | **Host URL** | Your Snowflake account URL | `myorg-myaccount.snowflakecomputing.com` | | **Username** | Snowflake user | `mammoth_reader` | | **Password** | Password for the Snowflake user |—| | **Database** | Name of the Snowflake database | `ANALYTICS_DB` | | **Warehouse** | Snowflake virtual warehouse to run queries | `COMPUTE_WH` | | **Account** | Your Snowflake account identifier | `myorg-myaccount` | | **Role Name** | Snowflake role to use (must have table access) | `MAMMOTH_ROLE` | ### Find your Snowflake account identifier Your Snowflake account identifier typically has the form `organization-account` (for example, `acme-analytics`), and your account URL is `{account}.snowflakecomputing.com`. > **Tip: Minimum required permissions** > > ```sql > GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE MAMMOTH_ROLE; > GRANT USAGE ON DATABASE ANALYTICS_DB TO ROLE MAMMOTH_ROLE; > GRANT USAGE ON ALL SCHEMAS IN DATABASE ANALYTICS_DB TO ROLE MAMMOTH_ROLE; > GRANT SELECT ON ALL TABLES IN DATABASE ANALYTICS_DB TO ROLE MAMMOTH_ROLE; > ``` After filling in the fields, click **Connect**. Mammoth validates the credentials and saves the connection; if validation fails, the error message appears at the bottom of the form. ## Step 3: Select a Snowflake schema and query your data ### Select a Snowflake schema Select your connection under **Existing Connections**, then click a schema in the **Schema** list. If the database has only one schema, Mammoth opens it automatically. ### Browse Snowflake tables Click any table in the **List of tables** panel to load a `SELECT *` query for it and its preview. ### Write a custom Snowflake query Edit the SQL in the **Enter SQL query** editor and click **Run**: ```sql SELECT order_id, customer_id, amount, order_date FROM ANALYTICS_DB.SALES.ORDERS WHERE order_date >= DATEADD(day, -90, CURRENT_DATE()) AND status = 'COMPLETED' ``` See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 4: Save the Snowflake dataset 1. Enter a **dataset name** in the **Save table as** field 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Allow Mammoth in your Snowflake network policy If your Snowflake account has a network policy restricting IP access, add Mammoth's IP address to the allowed IP list of that policy in Snowflake. The connection form shows the IP address to allow. See [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/). ## Troubleshoot Snowflake connections ### Authentication fails - Verify the **Account** value—it should match your Snowflake account identifier exactly, without the `.snowflakecomputing.com` suffix - Check the role has access to the warehouse, database, and schemas --- # Understanding data preview & query URL: https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/ · Updated: 2026-11-02 Use the connector query and preview screen: pick a table, write or generate a SQL query, read the preview, and save a dataset with an update method. After you connect and select a database, schema, or SaaS connection, Mammoth opens the **query and preview screen**. This is where you choose what data to bring in—by selecting a table or writing a SQL query—and preview a sample of the results before saving your dataset. ## Query and preview screen layout The query and preview screen has three areas: ### Left panel: List of tables A scrollable list of the tables available through your connection. Click any table name to load it into the query editor and run an automatic preview. Use the search icon to filter the list. ### Center: query editor The SQL query that defines what data Mammoth will import. When you click a table, Mammoth loads a `SELECT *` query for that table here. Click the edit icon to change the query or write your own. ### Right: preview grid A preview of the rows returned by your query, under the **Preview** heading. This shows the columns that will be imported into your dataset. ## Select a table 1. In the **List of tables** panel, scroll or search for your table 2. Click the table name—Mammoth generates a default query and runs a preview automatically 3. The preview grid on the right populates with sample data You can select a different table at any time by clicking it in the left panel. The query and preview update automatically. ## Write a custom query The default query selects all rows and columns from the chosen table. To import a subset of data: 1. Click the query text or the edit icon to open the query editor. Mammoth warns that editing the query changes the structure of your data and could cause errors in Views that depend on it 2. Modify the SQL to filter rows, select specific columns, or join tables: ```sql SELECT id, name, email, created_at FROM customers WHERE created_at >= '2024-01-01' ORDER BY created_at DESC ``` Use the table and column names from your own source. 3. Click **Run** to execute the query and refresh the preview > **Tip: Filter in the query.** > Filter rows in your query rather than importing everything and filtering later. Importing less data makes your dataset faster to refresh and cheaper on your source system. See [Connector performance & best practices](https://mammoth.io/docs/learn/performance/connector-optimization/) for more tips. ## AI query generation For supported connectors, when enabled for your workspace, you can describe what data you want in plain language and Mammoth writes the SQL query for you. ### Connectors that support AI query generation - PostgreSQL - MySQL - SQL Server - SAP HANA - HubSpot - Xero ### Generate a query with AI 1. In the **Describe the data you need...** box above the query editor, type what you want—for example: *"all customers who signed up in the last 30 days"* 2. Click the AI button next to the box (or press Enter) 3. Mammoth analyses your table structure and writes a SQL query. The box is disabled while Mammoth sets up metadata for AI query 4. Review the generated query, then click **Run** to preview the results 5. Edit the query if needed before saving > **AI query generation builds on your table structure.** > Mammoth analyses the column names and types in your selected table to generate accurate queries. For best results, select a table first, then describe your intent. If the generated query isn't quite right, you can edit it directly before running. If the **Describe the data you need...** box isn't visible, AI query generation isn't enabled for your workspace or isn't available for your connector—use the query editor directly. ## Read the preview grid The preview grid shows a sample of your query result so you can verify your data looks correct before saving. ### What the preview shows - Column names as they appear in your source system - Actual data values—check these against what you expect ### When the preview is loading Mammoth shows "Loading Preview" while it queries your source. ### When no data appears - Before you pick a table, the grid says "Select table or run a query to preview data" - If the list says "No tables were found", the connection has no tables the user can see—check the user's permissions in the source - If the query fails, Mammoth shows "The query did not return results" with the error message below the query editor—check your `WHERE` clause and syntax ## Save the dataset When the preview looks right, save your dataset at the bottom of the screen: ### Dataset name Enter a name for your dataset in the **Save table as** field. This is how it will appear in your Data Library. Choose something descriptive—for example, *"Salesforce Contacts"* or *"PostgreSQL Orders 2024"*. ### Update method The **Update Method** controls what happens to your dataset when it is refreshed (via scheduled automation or manual refresh). The default is **Replace all data**. To change it, click the edit icon next to the update method, pick an option, and click **Save changes**: | Method | What it does | When to use | | --- | --- | --- | | **Replace all data** | Replaces all existing data with the full query result fresh | Snapshots, lookup tables, full refreshes where all data is replaced | | **Add new data** | Adds new data based on a unique sequential column without modifying existing rows | Incremental imports where only new records are added | | **Replace with new data** | Replaces existing data with new data based on a unique sequential column | Updates to existing records with ability to track changes | Use **Replace all data** for complete data replacements. Use **Add new data** for appending-only scenarios. Use **Replace with new data** when you need to update specific records based on a unique identifier. For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. Click **Save as dataset**. When the dataset is saved, click **Done** to return to your Data Library. File connectors (Google Drive, Dropbox, SFTP, and similar) don't use this screen: you select a file and click **Create new dataset**. ## After saving Your connector dataset is now in your Data Library. To keep it up to date, set up a **Dataset Refresh** automation—this re-runs your query on a schedule and updates the dataset according to its update method. See [Scheduling & automation](https://mammoth.io/docs/learn/automations/creating-an-automation/) to get started. --- # Xero connector URL: https://mammoth.io/docs/learn/connectors/xero-connector/ · Updated: 2026-11-02 Connect Mammoth to Xero with OAuth, pick an organisation, query accounting tables with SQL or AI query generation, and save the results as a dataset. The Xero connector imports accounting and financial data from your Xero organisation into Mammoth as a dataset. Authenticate with OAuth—no API keys required. Supports AI query generation for natural-language data selection. ## Before you start You need: - A Xero account with access to at least one organisation ## Step 1: Select the Xero connector 1. In Mammoth, go to **Data Library** and click **+ New Dataset** 2. Select **Connectors** 3. Search for **Xero** 4. Click the **Xero** tile ## Step 2: Authenticate with Xero Click **New Connection** to start the OAuth flow. ![Xero Log in page asking for email address and password to continue to ThirdpartyApp](https://mammoth.io/docs/images/20260826_115528_styled3.webp) Mammoth sends you to Xero's authorization page in the same browser tab. Sign in with your Xero account and authorize Mammoth. You're redirected back to Mammoth automatically. ## Step 3: Select a Xero organisation (profile) After authentication, select the connection under **Existing Connections**. Mammoth lists the Xero organisations your account can access as **Profile** entries. Click the organisation you want to import data from. If your account has only one organisation, Mammoth opens it automatically. ## Step 4: Select Xero data and query The **List of tables** panel shows the tables this connector exposes for the organisation. Click a table to load a `SELECT *` query for it and its preview. ### Write a custom Xero query Edit the SQL in the **Enter SQL query** editor and click **Run**. Use the table and column names shown in the table list and the preview. ### Generate a Xero query with AI Use the **Describe the data you need...** box above the query editor to tell Mammoth what you want in plain language—for example, *"all overdue invoices from this quarter"*—and click the generate button. Mammoth writes the SQL query based on your table structure and description. The box appears only when AI query is enabled for your workspace, and it is disabled while Mammoth sets up metadata for AI query. See [Understanding data preview & query](https://mammoth.io/docs/learn/connectors/understanding-data-preview-query/) for a full guide. ## Step 5: Save the Xero dataset 1. Enter a **dataset name** in the **Save table as** field (e.g., *"Xero Invoices"*) 2. Check the **Update Method** (the default is **Replace all data**). To change it, click the edit icon, pick an option, and click **Save changes**: - **Replace all data**—Replaces all existing data - **Add new data**—Adds new data based on a unique sequential column - **Replace with new data**—Replaces existing data with new data based on a unique sequential column For **Add new data** and **Replace with new data**, also choose a **Key column**—a numeric or date column with incrementing values, such as an ID or a date. 3. Click **Save as dataset**. When the dataset is saved, click **Done** ## Troubleshoot Xero connections ### Authorization does not complete - Mammoth sends you to Xero in the same browser tab and returns you to Mammoth afterwards. If you close the tab or deny access, start the connection again ### Organisation not visible - Confirm the Xero user has been granted access to the organisation in Xero. Mammoth shows "No profiles could be found for the connection" followed by the connection name when it finds none. ### Data appears outdated - Mammoth imports the data when you save the dataset and on each refresh. Set up a **Dataset Refresh** automation to refresh on a schedule. --- # Creating dashboards URL: https://mammoth.io/docs/learn/dashboard/creating-dashboards/ · Updated: 2026-11-02 Create a Mammoth dashboard: pick your data or a template, choose a format, describe what you want to the AI, then refine it in the editor and save. Mammoth dashboards are built through a conversation with AI. You describe the charts and insights you need—the AI reads your data's structure and generates a live, interactive dashboard. No coding or manual chart configuration required. ## Before you start You can start from your data, a template, or an existing report: - **Your data** needs a **View**, the prepared version of your data in a Mammoth project. If you haven't created one yet, set one up in your project first. - **Start blank** and **templates** don't need data up front. A template comes with sample data, and you must connect your own data (**Use my data**) before you can publish it. > **Note:** Dashboards can only use data from projects you can access. You can't link Views from different workspaces. ## Step 1: Choose where to start 1. Click **Dashboards** in the left sidebar 2. Click **Create** 3. On **What do you want to build?**, pick a lane **With my data** shows your recent Views. Choose one, or click **Browse all data** to find any View you can access. You can also click **Start blank** to build from an empty canvas. **With a shape** starts from something that already exists: - A **template**—peek at one, or click **Browse all templates** - **Bring a report over**—accepts PDF, Screenshot, Power BI, and Tableau - **Copy one of mine**—start from a dashboard you already have ![What do you want to build screen with the With my data and With a shape lanes](https://mammoth.io/docs/images/20261009_003800_What-do-you-want-to-build-lanes.webp) The AI reads your View's columns and sample data to understand what's available. ## Step 2: Choose a format and describe it After you choose data, pick a format card: - **Dashboard**—tiles you come back to - **Doc**—written findings, in order - **Slides**—a deck - **Q&A**—a page where you ask questions and the answers become cards The header shows the View you're building from (for example "from Sales") with a **Change** link to pick another one, plus its row and column counts. For Dashboard, Doc and Slides, the AI suggests ideas based on your columns, each with a short description. Select an idea to see a **Roughly this** sketch of the layout, then click **Build this dashboard** (**Build this doc** or **Build these slides** for the other formats) to build it. Or type your own description in the prompt box, **...or describe the dashboard you want**. If the AI can't read your columns, it asks you to describe what you want instead. **Q&A** doesn't suggest ideas. It offers **Open a notebook**, where readers ask their own questions of the data and each answer comes back as a chart or a number. Click **Add context** under the prompt to attach saved **Context**: definitions or goals, so answers use your terms. ![Results screen with format cards, dashboard ideas from your data, the prompt box and Add context](https://mammoth.io/docs/images/20261009_003747_What-do-you-want-to-build-results.webp) Be as specific or as general as you like: **General:** > "Give me a sales performance overview" **Specific:** > "Show me monthly revenue as a line chart, top 10 products by units sold as a bar chart, and a KPI card with total transactions this quarter" The AI uses your column types to choose charts: - Date columns → used for time-series charts - Categorical columns → used as chart dimensions or filters - Numeric columns → used as metrics, such as sums, averages, or counts Build from an idea or submit your description. A progress screen shows the build steps—**Analyze your data**, **Design the layout**, **Build the charts**, and **Finalize the pages** (the wording changes for docs, slides, and Q&A). Then the editor opens. > **Templates and plan limits:** a template lets you preview the layout on sample data. Samples can't be published until you connect your own data. How many dashboards you can publish and generate depends on your plan. ## Step 3: Review and refine in the editor The editor has a left panel with three tabs and a live preview of the dashboard as viewers will see it: - **AI Chat**—Describe changes in plain language - **Design**—Format, page structure, navigation, style, and signature (see [Dashboard themes](https://mammoth.io/docs/learn/dashboard/dashboard-themes/)) - **Data**—The sources behind the dashboard The **Add** menu in the header adds a **Chart**, **Filter**, **Page**, **Cover**, **Q&A** page, or **Explore** page. The header also has rename, history, a Desktop/Tablet/Mobile preview switch, **Edit layout**, undo and redo, and **Preview**. When a dashboard has a **Q&A** page, an **Ask AI** button appears in the bar above its pages. It jumps to the Q&A page, and it is hidden while you are already on that page. ![Dashboard editor with the Add menu open and the header toolbar](https://mammoth.io/docs/images/20261009_003215_Dashboard-editor-add-dialog.webp) **Examples of follow-up requests in the chat:** - "Change the bar chart to a horizontal layout" - "Add a filter for region" - "Split this into two pages—one for sales, one for marketing" - "Make it show only data from this year" Each request updates the dashboard in real time. The AI preserves your previous choices unless you explicitly ask to change them. ## Save, then publish Saving is explicit. When you have unsaved edits the header shows **Unsaved changes**, and publishing is disabled until you save. After you save, use the **Publish** button to go live (see [Publishing and sharing dashboards](https://mammoth.io/docs/learn/dashboard/share-dashboard/)). ## What charts can you add? | Chart type | Best for | | --- | --- | | Line | Trends over time | | Bar | Comparing categories | | Bar (H) | Rankings | | Donut | Part-to-whole proportions | | Scatter | Correlation between two metrics | | KPI | Single key metric with label | | Table | Detailed row-level data | | Heatmap | Two-dimensional density | | Sankey | Flow and distribution between categories | The chart picker offers many more, such as area, combo, funnel, gauge, histogram, box plot, radar, treemap, waterfall, and map. ## After creation From the editor you can: - [Publish and share the dashboard](https://mammoth.io/docs/learn/dashboard/share-dashboard/) - [Set up data sync](https://mammoth.io/docs/learn/dashboard/managing-dashboard/#data-sync) to keep charts current - Return at any time and keep chatting with the AI to change it --- # Dashboard filters URL: https://mammoth.io/docs/learn/dashboard/dashboard-filters/ · Updated: 2026-11-02 Dashboard filter controls in Mammoth (dropdown, chips, checklist, search, range, motion), how to add and scope them, and how they affect charts. Filters let you and your dashboard viewers interactively slice data without changing the underlying charts. When the AI builds your dashboard it derives a few default filters from your data. You can add, edit, or remove filters at any time. The filters bar is a section of the dashboard. To show or hide it, open the **Design** tab and use **Sections** (**Filters bar**). ![Dashboard with the filters bar showing an Index range filter and a Subscription Date range filter](https://mammoth.io/docs/images/20261009_004055_Dashboard-filters-bar-two-controls.webp) ## Filter controls Each filter has a **control**, which sets how people pick values: ### Dropdown Pick a single value from a menu. Compact, best for one choice at a time (like Status or Type). ### Chips Removable pills that people tap to include. Best when there are only a handful of options. ### Checklist Tick boxes to include several values at once. Good for medium-length lists (like Region or Product Category). ### Search Type to find a value. Best when the list is long, like customer names or product IDs. ### Range Drag a minimum and maximum. Range works for number and date fields. ### Motion A playable timeline for a date field. Press play and the whole dashboard sweeps through time. Range and Motion need a number or date field. ## Adding, editing, and removing filters There are two ways to change filters. **Ask the AI chat:** > "Add a filter for product category" > "Remove the Revenue filter" **Use the Add menu:** 1. Click **Add** in the editor header, then choose **Filter** 2. Describe the filter, or pick the **Field** yourself 3. Choose the **Control** (Dropdown, Chips, Checklist, Search, Range, or Motion) 4. Choose what it **Applies to** 5. Choose what it **Starts showing** 6. Click **Add filter** To change a filter later, open it and click **Update filter**, or use **Remove filter**. ![Add Filter panel with the field, control, Applies to and Starts showing settings](https://mammoth.io/docs/images/20261009_003224_Add-filter-panel-field-control-applies-to.webp) ### Starting values **Starts showing** sets what viewers see first: **All** values, or preselected values. This lets a dashboard open pre-filtered to a time period, region, or other dimension. ## Filter scope You choose the scope of each filter: - **Every page**—The filter applies to the charts on all pages - **This page**—The filter applies only to the page it's on ## How filters affect charts When a viewer changes a filter: 1. The charts in its scope update to show only matching data 2. KPI cards recalculate their totals See [Multi-page navigation](https://mammoth.io/docs/learn/dashboard/dashboard-navigations/) for how pages and filters interact. --- # Multi-page navigation URL: https://mammoth.io/docs/learn/dashboard/dashboard-navigations/ · Updated: 2026-11-02 Split a Mammoth dashboard into pages with the Add menu, the Manage pages panel, or the AI chat, and choose top tabs or a left rail for navigation. When your dashboard covers multiple topics or audiences, you can organize it into **pages**. Each page has its own set of charts—letting viewers focus on one topic at a time. ## How pages look In the editor, open the **Design** tab. Under **Format**, set **Navigation** to one of: - **Top tabs**—A tab bar across the top of the dashboard - **Left rail**—A sidebar down the left ![Design tab showing the page list and the Navigation setting with Top tabs and Left rail](https://mammoth.io/docs/images/20261009_004200_Design-tab-navigation-top-tabs-left-rail.webp) ## AI-generated pages When you describe content across several distinct topics, the AI can propose a multi-page structure. For example: > "Create an executive dashboard with sales performance, marketing metrics, and operations KPIs" You can also ask for pages explicitly: > "Split the dashboard into two pages: one for quarterly results and one for team performance" ## Adding and managing pages **Add a page:** click **Add** in the editor header, then **Page**. Describe what the page is about and the AI composes it, or start from a page layout such as Executive overview, Operational monitor, or Analytical deep-dive. Nothing is added empty. **Manage pages:** open the **Manage pages** panel to add, rename, duplicate, and delete pages. Drag a page to reorder it. **Page structure:** in the **Design** tab, **Page structure** sets the layout variant of a page: the same content, arranged differently. Use **Apply to a copy** to keep the saved page and put the new structure on a duplicate. You can also use the AI chat: > "Add a new page called 'Customer Insights'" > "Move the Marketing page to be the first tab" ## Filters across pages You choose a filter's scope: **Every page** or **This page**. A filter set to every page applies across the whole dashboard. See [Dashboard filters](https://mammoth.io/docs/learn/dashboard/dashboard-filters/). ## Preview on different screens Use the viewport switch in the editor header to preview **Desktop**, **Tablet**, and **Mobile** layouts and check how your pages look on each. --- # Dashboard themes URL: https://mammoth.io/docs/learn/dashboard/dashboard-themes/ · Updated: 2026-11-02 The Mammoth dashboard styles (Stone, Modern, Editorial and more), light and dark mode, custom workspace styles, shape controls, and the signature. A dashboard's look is set by its **style**, together with a light or dark **mode**. Styles control colors, fonts, backgrounds, and component styling. You choose them in the **Design** tab of the editor. The default style for new dashboards is **Stone**. ## Applying a style 1. Open your dashboard in the editor 2. Click the **Design** tab in the left panel 3. Under **Style**, pick a style from **System styles** or **Workspace styles** ![Design tab Style section listing System styles and Workspace styles](https://mammoth.io/docs/images/20261009_004146_Design-tab-style-system-and-workspace.webp) The preview updates as you choose. Save the dashboard to keep the change. ## System styles Mammoth includes these system styles: - **Stone** (default) - **Modern** - **Editorial** - **Mono** - **Keynote** - **Midnight** - **Paper** - **Nordic Ink** - **Deep Water** ## Light and dark mode **Mode** is separate from the style. Choose **Light** or **Dark** to switch any style. Some styles work in only one mode and show **Dark only** or **Light only**. ## Workspace styles Workspace styles are custom styles shared in your workspace. Create one with **New style** or **Add style**. The style editor can read your brand from a logo, an uploaded image, or a website address (**From a website**), and you can adjust it from there. You can also change these controls: - **Corners**—from sharp to extra-round - **Density**—compact or comfortable padding inside tiles - **Card style**—flat, bordered, or elevated On a style you can **Edit**, **Rename**, **Delete**, **Duplicate to customize**, or **Set as default**. Deleting a style makes dashboards that use it fall back to the default. ## Signature The **Signature** section adds a logo and footer to your dashboard. The Mammoth Signature is included on plans that have it, and adding or changing a signature depends on your plan. ## Format and sections The **Format** section of the Design tab sets whether the item is a Dashboard, Doc, Slides, or Q&A page. Changing the format re-composes the canvas. **Sections** turns optional sections on and off, like **Key insights** and the **Filters bar**. --- # Dashboards URL: https://mammoth.io/docs/learn/dashboard/ · Updated: 2026-11-02 Overview of Mammoth Dashboards: AI-built dashboards, docs, slides and Q&A pages on your data, with filters, pages, styles, and sharing by link or to signed-in users. Dashboards turn the data in your Mammoth project into interactive, shareable visualizations, built through conversation with AI. Describe what you want to see, and the AI generates a styled dashboard. This section is for anyone who builds or shares reports; to start, read [Creating dashboards](https://mammoth.io/docs/learn/dashboard/creating-dashboards/). You open the library from **Dashboards** in the left sidebar. The page has three tabs: **Dashboards**, **Context**, and **Templates**. The Dashboards tab lists everything you can open, as a searchable library with a shelf of collections on the left. A details panel opens when you select a row. ![Dashboards library with the details panel open on a selected dashboard, showing its tabs and Share and Edit buttons](https://mammoth.io/docs/images/20261009_003147_Dashboards-library-details-panel.webp) ## What you can do - **Create with AI**—Pick your data, choose a format, and describe what you want. The AI builds it from your columns - **Build four formats**—Each item in the library is a Dashboard, Doc, Slides deck, or Q&A page - **Start from a template or an existing report**—Use a template, copy one of your own, or bring a report over from a PDF, a screenshot, Power BI, or Tableau - **Filter and explore**—Add dropdowns, chips, checklists, search boxes, range sliders, and a playable date timeline - **Organize across pages**—Group related charts into pages, with top tabs or a left rail - **Choose a style**—Pick a system style or build your own from your logo or website, in light or dark mode - **Publish and share**—Share by link with signed-in users or anyone with the link, invite people by email, and see who views it in Audience - **Manage**—Search, filter, tag, pin, archive, and group dashboards into collections ## How it works You pick the data a dashboard is built on, and the AI reads its column names, data types, and sample values. It then suggests the most relevant charts and filters for your data. You refine the result in the editor with the AI chat, the Design tab, and the **Add** menu. ![Dashboard editor with the AI Chat, Design and Data panel tabs, the Add menu and the Share button](https://mammoth.io/docs/images/20261009_003203_Dashboard-editor-overview.webp) ## Dashboards vs. other features | | Dashboards | Views | Published Views | | --- | --- | --- | --- | | **Purpose** | Interactive visualization | Data preparation | Raw data sharing | | **AI-built** | Yes | No | No | | **Shareable externally** | Yes (2 modes) | No | Yes | | **Interactive filters** | Yes | N/A | No | | **Best for** | Executive reports, stakeholder updates | Data cleaning, transformation | Data exports | ## Access Everyone in a dashboard's project has access to it. You can also invite people outside the project by email, or publish it as **Anyone with the link** for clients and external stakeholders who don't have Mammoth accounts. Invited people are always viewers. See [Publishing and sharing dashboards](https://mammoth.io/docs/learn/dashboard/share-dashboard/). ## In this section - [Creating dashboards](https://mammoth.io/docs/learn/dashboard/creating-dashboards/)—How to start a dashboard with AI - [Dashboard filters](https://mammoth.io/docs/learn/dashboard/dashboard-filters/)—Filter controls and how they work - [Dashboard themes](https://mammoth.io/docs/learn/dashboard/dashboard-themes/)—Styles, modes, and branding - [Multi-page navigation](https://mammoth.io/docs/learn/dashboard/dashboard-navigations/)—Organizing dashboards into pages - [Publishing and sharing dashboards](https://mammoth.io/docs/learn/dashboard/share-dashboard/)—Sharing options and access control - [Managing dashboards](https://mammoth.io/docs/learn/dashboard/managing-dashboard/)—Finding, editing, syncing, and deleting --- # Managing dashboards URL: https://mammoth.io/docs/learn/dashboard/managing-dashboard/ · Updated: 2026-11-02 Find, edit, duplicate, archive, and delete Mammoth dashboards; keep them in sync with new data; see who views them in Audience; download a PDF. Open **Dashboards** in the left sidebar to find, open, edit, and organize everything you've built. ## The dashboard library The **Dashboards** tab is a library of your dashboards, docs, decks, and Q&A pages. Each row shows its format, name, source data, status (Draft or Published), tags, and when it was last updated. Pills flag things that need attention, such as **New data** or **Unpublished** changes. To find things: - **Search** by name, source, or tag - **Filter** by Project, Format, Source data, Status, Last edited by, Tags, and Collections, plus an **Updated** range (today, this week, this month, this quarter, or a custom range) - Show or hide **Archived** items - **Group** by date or as a flat list, and **Sort** by last updated, date created, name, status, or views - Open a **collection** from the shelf on the left Click a row to open its details panel. There you can rename the dashboard, add tags and collections, and click **Edit**, **Preview**, or **Share**. The panel also has tabs for **Audience**, **Updates**, **Sources**, **Access**, and **Embeds**. Double-click a row, or click **Edit**, to open the editor. Each row's **⋯** menu has **Rename**, **Archive**, **Embed**, **Add to collection**, **Remove from collection**, and **Delete**. You can also **pin** a dashboard to the top of the list. Pins are stored in your browser. ## Editing a dashboard Open a dashboard in the editor and keep working with the AI chat, the Design tab, and the **Add** menu. See [Creating dashboards](https://mammoth.io/docs/learn/dashboard/creating-dashboards/). Saving is explicit. The editor shows **Unsaved changes** until you save, and you can't publish while changes are unsaved. Saving does not change what viewers see: a published dashboard stays as it was until you publish again. Use **History** to review earlier versions of your edits. ## Publish menu actions The caret next to the **Publish** button opens more actions: - **Download PDF**—captures a static snapshot of the dashboard - Share as a carousel - **Export to Power BI** or **Export to Tableau** (dashboards only) - **Copy link** - **Embed** - **Add to collection** - **Duplicate** - **Change data** - **Copy onto another dataset** - **Save as template** ### Duplicating a dashboard Open the dashboard in the editor and choose **Duplicate** from the Publish caret menu. The copy opens in the editor. Duplicate isn't in the library's row menu. ## Archiving and deleting ### Archiving a dashboard **Archive** hides a dashboard from the library. Show archived items with the **Archived** filter, and use **Restore from archive** to bring one back. ### Deleting a dashboard **Delete** moves a dashboard to Trash: 1. In the library, open the row's **⋯** menu and click **Delete** 2. Confirm in the dialog A deleted dashboard is unpublished, so its share link stops working. You can restore it from Trash during the Trash retention period. A restored dashboard comes back as a **draft** and keeps its link and sharing settings, so publishing again is one click. ## Draft and published versions Mammoth dashboards have two states: - **Draft**—The working version you edit. Changes here are only visible to you and other editors until published - **Published**—The version that viewers and shared users see The editor header shows **Live** or **Draft**, with extra pills such as **New data** and **Unpublished**. Mammoth tracks two types of changes separately: - **Data changes**—new data from your sources - **Presentation changes**—layout, style, filters, and chart configuration **To publish your changes:** 1. Save your edits 2. Open **Share** and click **Publish** 3. Viewers now see your changes ## Data sync A dashboard shows the data from its sources as of the last sync. To see how current it is, open the **Updates** modal from the library or from the editor's state line. It shows three steps: **Sources**, **Draft**, and **Live**. **Sync new data:** this stage pulls new rows into your draft. Each source has its own **Sync** button. There's no single button that syncs all sources. Turn on **Sync automatically** to bring new rows into your draft whenever the pipeline runs. **Publish:** this stage lists **Data changes** and **Presentation changes** waiting to go live, with a **Publish** button. Turn on **Publish new data automatically** to send new data live as soon as it syncs. With it on, layout and style changes still wait for you to publish. With both toggles on, new data flows from your source to the published dashboard without manual steps. ## Changing the data Open the **Data** tab in the editor to see the dashboard's sources. To point the dashboard at different data, use **Change data** in the Publish caret menu. **Copy onto another dataset** applies the dashboard to a different dataset. ## Audience **Audience** shows how a published dashboard is used. Open it from the first tab of the details panel, from the Share panel, or from the audience chip in the editor header. You can pick a date range. Audience shows: - **Who** viewed it, with named and anonymous viewers - **Where** they are, by country - **On what** devices they view it - **What they're asking**, from viewer Q&A (when viewer Q&A is on) You can also turn on a weekly email about the dashboard. For a draft, Audience reads **Publish to start counting**, and your own visits are never counted. ## Permissions Each dashboard belongs to a project, and everyone in that project has access to it. People you invite from the Share panel are always viewers. See [Publishing and sharing dashboards](https://mammoth.io/docs/learn/dashboard/share-dashboard/). --- # Publishing & sharing dashboards URL: https://mammoth.io/docs/learn/dashboard/share-dashboard/ · Updated: 2026-11-02 Publish a Mammoth dashboard, choose Sign-in required or Anyone with the link, invite viewers by email, and unpublish. Covers the Share panel. Once your dashboard is ready, you can publish it and share it with anyone—teammates, clients, or external stakeholders. Publishing creates a live, shareable version at a unique link. Access settings decide who can open it. ## Opening the Share panel 1. Open your dashboard in the editor and save your changes. You can't publish with unsaved changes. 2. Click the primary button in the header. It reads **Publish** while the dashboard has something to publish, and **Share** when it's live and up to date. The **Share** panel opens. Before publishing it reads **Not published yet**. ## Publishing your dashboard Click **Publish** to make the dashboard live. Click **Publish & copy link** to publish and copy the link in one step. Once published, the panel shows: - A **Live** badge and when it was **Last published** - **View**, which opens the live dashboard - The share link, with a **Copy** button - A **Link preview** of how the link looks when pasted in Slack or LinkedIn (layout and style only, never your data) - **Unpublish** ![Share panel for a published dashboard with the Live badge, link, link preview and Audience row](https://mammoth.io/docs/images/20261009_004256_Share-panel-published-live.webp) If you change a published dashboard, the panel lists the **Unpublished changes** so you can see what is waiting. Click **Publish** to make them live. When another author made some of the changes, the panel offers **Let know it's published**. Some things block publishing: - **Sample data.** A template on sample data can't be published until you connect your own data (**Use my data**) - **Plan limit.** If your plan's published-dashboard limit is reached, unpublish another dashboard or upgrade. The limit depends on your plan ## Access The panel shows who has access. By default, everyone in the dashboard's project does. The **Access** menu controls who else can open the published link. ### Sign-in required Viewers must sign in to Mammoth. Everyone in the project has access, and you can invite people outside the project by email. **Best for:** Internal dashboards, sensitive business data, or when you want to control exactly who has access. ### Anyone with the link Anyone with the link can view the dashboard, including all of its data. No sign-in required. **Best for:** External reports, client-facing summaries, or public data shared by email or in presentations. ### Inviting viewers Enter email addresses in **Invite by email** to share with people outside the project. For a draft, the button reads **Publish & invite**: it publishes first, then sends the invite. Invited people are always viewers. The panel lists your **Viewers**, and you can remove one to end their access. Viewers can view charts, use filters, and move between pages. They can't edit the dashboard. To let someone edit it, give them a role in the project. ## Advanced The **Advanced** section holds more options: - **Embed**—put the dashboard on your own site - **Row-level security**—restrict which rows each viewer sees, with values assigned per viewer - **Viewer Q&A**—let viewers ask questions. It isn't available on a public link Some of these depend on your plan and workspace settings. ## Share as video For a dashboard that is a motion story, **Share as video** generates an MP4 you can download and post. Upload the video itself, then paste your share link in the post text. ## Unpublishing To take a dashboard offline, open the **Share** panel and click **Unpublish**. Mammoth asks you to confirm: it revokes the shareable link, and anyone who has it loses access immediately. If the dashboard is embedded, you get a warning first. Your draft and its settings stay intact. You can republish later and the same link works again. ## What viewers see Viewers who open the link see the published dashboard, with its filters and pages. They can explore but can't change it. You can check this view yourself from **Preview** or **View**. Your own visits aren't counted in [Audience](https://mammoth.io/docs/learn/dashboard/managing-dashboard/#audience). --- # Add or replace data URL: https://mammoth.io/docs/learn/data-library/add-or-replace-data/ · Updated: 2026-11-02 Append new rows to a Mammoth dataset or replace it, using a file upload or another dataset. Covers update methods, column mapping, validation, and results. The **Add or Replace Data** workflow lets you update an existing dataset without starting from scratch. You can append new rows on top of your existing data, or overwrite it entirely, using either a file upload or another dataset in your project as the source. This guide is for anyone who maintains datasets. Start with [Select a workflow](#select-a-workflow). Use this when you need to: - Load the latest period of data into a running dataset (append) - Swap a dataset with a completely refreshed export (replace) - Merge two datasets that share the same schema > **Note:** The operation runs in the background. You do not need to wait on the modal. Track progress in the **Batches** section of the dataset preview panel or in the **Activity Log**. ## Select a workflow | Scenario | Source | Go to | | --- | --- | --- | | You have a new file (CSV, Excel, etc.) to load | **Upload file** | [Path A: upload a file](#path-a-upload-a-file) | | You want to pull data from another dataset in your project | **Select existing** | [Path B: select an existing dataset](#path-b-select-an-existing-dataset) | Both paths use the same **Add or Replace Data** modal. To open it: - **From the preview panel:** Click any dataset row, scroll to **Batches**, and click **Add new data** - **From the context menu:** Hover any dataset row, click **⋯**, and choose **Add or Replace data** Both entry points are available only for file-based datasets that have views. **Add new data** is not shown on the standalone Dataset Settings page. The dialog is titled with the dataset name followed by **Add or Replace data**. It has an **Input File** row (**Upload file** or **Select existing**) and an **Update Method** row. Choosing **Update Method** saves it to the dataset immediately, even if you then select **Cancel**. The same setting applies to both paths. ![Add or Replace data dialog with Upload file selected, Update Method set to Combine with older data, the PDF callout, and a disabled Submit button](https://mammoth.io/docs/images/20261009_013939_Add-or-Replace-data-dialog.webp) ## Path A: upload a file **Prerequisite**: You have Edit-level access to the dataset and a file in a supported format. ### Step 1: Choose an update method | Method | What it does | Best for | | --- | --- | --- | | **Combine with older data** *(default)* | Appends new rows to the existing dataset. Previous data is kept. | Incremental loads such as daily sales, event logs, transaction feeds | | **Replace the older data** | Deletes all existing rows and inserts the new data. | Full snapshots such as weekly inventory exports or complete dimension tables | ![Update Method dropdown open, listing Combine with older data (highlighted) and Replace the older data](https://mammoth.io/docs/images/20260430_065748_update_method_dropdown1.webp) ### Step 2: Upload your file | Detail | Value | | --- | --- | | Maximum file size | 50 MB ([limits](https://mammoth.io/docs/learn/limits-and-quotas/)) | | Accepted formats | CSV, TSV, PSV, TXT, XLS, XLSX, XML, ZIP, BZ2, GZ, TAR, 7Z, PDF, TIFF, JPEG, JPG, PNG, HEIC, WEBP | 1. Drag a file onto the drop zone, or click **Upload file** to browse your computer. 2. Choose your **Update Method** (Combine or Replace). 3. Optionally configure **Batch & Column Mapping settings** (see below). This row is not shown for PDF files. 4. If the Update Method is Replace and the file is not a PDF, select **Replace and use the new file's columns** when the file has new or renamed columns. The dataset's columns then become the file's columns. 5. Click **Submit**. The button stays disabled until a file is selected. A callout in the dialog explains that uploading a PDF replays the dataset's saved recipe automatically, while uploading a CSV or Excel file appends it directly by matching columns. **Expected result**: The dialog closes and Mammoth processes the file in the background. A new row appears in the **Batches** list. It reads **Applying recipe** while Mammoth structures the file, or **Pending** if the batch needs your input, such as a column mapping, a sheet selection, or a file password. Select a pending row to resolve it. --- ### Batch and column mapping settings The **Batch & Column Mapping settings** line appears below the file drop zone. It shows whether the dataset's incoming-data rules are set to **Default** or **Custom**. ![Batch & Column Mapping settings row showing Default, with a pencil icon at the right to edit](https://mammoth.io/docs/images/20260505_060023_batch_col_mapping_area1.webp) - **Default**: Mammoth maps columns by matching names and converts mismatched column types to text. - **Custom**: The dataset has saved, non-default mapping rules. Selecting the row (a pencil icon appears when you hover) opens the **Combine / Replace Settings** sub-dialog. ![Combine / Replace Settings dialog with If column type doesn't match set to Convert destination column to text and Column Mapping set to Map with existing columns](https://mammoth.io/docs/images/20260505_060336_combine_replace_setting_modal1.webp) #### If column type doesn't match | Option | Behavior | | --- | --- | | **Convert destination column to text** *(default)* | Changes the destination column's type to Text so all incoming values fit. Broadest compatibility, with no data lost. | | **Convert incompatible values to null** | Keeps the destination column's original type. Incoming values that can't be cast to that type are stored as `null`. | | **Do not update the dataset** | Aborts the operation if any column type mismatch is detected. Use this when strict type integrity is required. | #### Column mapping | Option | Behavior | | --- | --- | | **Map with existing columns** *(default)* | Mammoth auto-matches incoming columns to destination columns by exact display name. No manual mapping required. | | **Create new column mapping** | You define one or more **name aliases** per destination column. Mammoth uses these aliases to recognize the correct incoming column even if the name differs between files. | **When to use aliases:** If the same column appears under different headers in different source files (for example, `Cust_ID`, `CustomerID`, or `Customer id`), define aliases so Mammoth always maps them to the right destination column. When **Create new column mapping** is selected, a mapping table appears showing every destination column alongside its configured aliases: | Element | Description | | --- | --- | | **Alias pills** (for example, `Customer id ×`) | The name(s) Mammoth will look for in incoming data. Click a pill to edit its name; click **×** to remove it. Multiple aliases are joined with "or", so any match will work. | | **+ button** | Adds a new alias for this column. | | **Toggle** | Enables or disables mapping for this destination column. | | **Type icon + column name** (right side) | The destination column's data type and name. | The **All destination columns must be mapped** checkbox: when checked, new data is added only if its number of columns matches the existing dataset. Click **Save changes** to persist the configuration. The **Batch & Column Mapping settings** line updates to show **Custom**. **Expected result**: Future loads use your saved mapping rules. ## Path B: select an existing dataset **Prerequisite**: You have Edit-level access to the destination dataset and can see the source dataset in the same project. Use **Select existing** when you want to combine or replace using data from another dataset already in your project. ### Step 1: Select the source dataset ![Select existing source list showing store_transaction and cust1-extra-col.xls_test02, a data preview, and a Review Column Mapping button](https://mammoth.io/docs/images/20260430_065845_select-existing-list-dataset-to-combine1.webp) Open the **Dataset** picker and choose the source. It lists the other datasets in the current project, plus the project's unprocessed PDF files (marked **Unprocessed PDF**). Datasets that hold unstructured data are marked with a warning icon and **Needs structuring**. They appear only when the destination dataset has a saved recipe, and they must be structured to match the destination before they can combine. Once a dataset is selected, a data preview appears showing the source columns and the first rows of data. Two picks behave differently: - **Unprocessed PDF**: Mammoth replays the destination's saved recipe against the PDF. There is no column mapping, and the button is **Submit**. - **Needs structuring**: The button is **Apply Recipe**. It previews the destination's recipe applied to the source dataset, and nothing is written until you select **Submit**. Submitting confirms the recipe on the source and deletes the source dataset. --- ### Step 2: Check the update method The **Update Method** at the top of the dialog also applies here. **Combine with older data** (default) appends the source rows and keeps previous data. **Replace the older data** deletes all existing rows and inserts the source rows. The table under [Step 1 of Path A](#step-1-choose-an-update-method) describes both. ![Animation of the Add or Replace data dialog with Select existing chosen and an empty Select dataset dropdown](https://mammoth.io/docs/images/20260508_050328_map-replace.webp) --- ### The Delete dataset after combining checkbox The **Delete dataset after combining** checkbox is checked by default. It is hidden when you pick a PDF or a dataset that needs structuring. If left checked, Mammoth permanently deletes the source dataset after the operation completes. Uncheck it to keep the source dataset intact. Leave it checked only when the source is a temporary staging dataset that is no longer needed after the merge. ![Add or Replace data dialog with Select existing chosen, orders.csv in the source field, and Delete dataset after combining checked](https://mammoth.io/docs/images/20260505_060220_Screenshot2026-04-281612071.webp) --- ### Step 3: Check schema validation After selecting a source dataset, Mammoth automatically checks whether its column structure matches the destination's schema. | Outcome | Indicator | What to do | | --- | --- | --- | | Schemas match | Green check: "New data matches the settings" | Click **Validate** or **Submit**, or **Review Column Mapping** to adjust | | Schemas differ | Red message: "This new data does not matches the settings" | Click **Review Column Mapping**, then complete Step 4 | --- ### Step 4: Review column mapping (only if schemas differ) ![Column mapping view with Customer id unmapped, Customer name and Item matched, Save results into options, and Previous and Validate buttons](https://mammoth.io/docs/images/20260430_071019_review-column-mapping1.webp) The sub-header confirms what is happening: ```plaintext [Destination dataset] is combining data with [Source dataset] ☑ Delete dataset after combining ``` The mapping table lists every destination column on the left (with its data type icon) and a **Select column** dropdown on the right for choosing the matching source column. **Column type icons:** | Icon | Type | | --- | --- | | `T` | Text | | `#` | Number | | `⏱` | Date / Time | Use the **Filter columns by** dropdown to show **All**, **Matched**, or **Unmatched** columns. A column search appears when the dataset has many columns or when you start typing a query. When a mapped source column has a different type from the destination column, a selector lets you choose which column type to keep. The **Validate** button is enabled once at least one column is mapped (and, for a new dataset, once it has a name). Unmapped columns are allowed. After a successful validation, the button becomes **Submit**. When **Save results into** is **New Dataset**, **Submit** is available without validating. #### Save results into a new dataset By default, the combined result overwrites the destination dataset. Toggle **Save results into** to **New Dataset** to preserve both the source and destination and write the output to a new dataset instead. You can name the new dataset (up to 300 characters). ## Validation before submit When you click **Validate**, Mammoth runs a pre-flight check to detect any views, pipelines, or tasks that depend on the destination dataset and would be affected by the operation. If issues are found, a **Review** modal appears listing the affected items. You must confirm you understand the impact before the final submit becomes available. ## What happens after submit The dialog closes right away and the operation runs in the background, so you don't need to wait on it. For **Select existing**, a message confirms when the source dataset will be deleted. Mammoth: 1. Appends or replaces the data rows in the destination dataset 2. If **Replace** was selected, deletes the previous batch records 3. If **Delete dataset after combining** was checked, removes the source dataset 4. Updates the **batch count** shown in the dataset preview panel 5. Reruns dependent views and pipelines. A view whose incoming link has Auto-sync off is not rerun: the new batch stays pending, and Monitor shows "new batch received, auto-sync off" with **Preview** and **Process** buttons 6. Creates an Activity Log entry recording what happened, who triggered it, and when You can monitor progress in the **Batches** section of the dataset preview panel or in the **Activity Log**. **Batch count after the operation:** With **Combine**, the batch count increments by one for each operation. With **Replace**, the previous batch records are removed and a single new batch appears (created suspended if all the previous batches were suspended). ## Related articles - [Data Consolidation](https://mammoth.io/docs/learn/automations/data-consolidation/): automate combine/replace for scheduled file uploads across an automation - [Dataset Refresh](https://mammoth.io/docs/learn/automations/dataset-refresh/): refresh a cloud-connected dataset on a schedule using the same Combine / Replace logic - [Activity Log reference](https://mammoth.io/docs/learn/monitor/activity-log/): track every batch operation with timestamps and full audit context --- # Cloning and moving datasets URL: https://mammoth.io/docs/learn/data-library/clone-move-data/ · Updated: 2026-11-02 Clone a Mammoth dataset into an independent copy, including into another project through the API, or move datasets and folders within a project. Covers clone options, permissions, and known limitations. This guide is for anyone who organizes a project's Data Library. Start with [Cloning a dataset](#cloning-a-dataset) or [Moving datasets and folders](#moving-datasets-and-folders). Two actions let you restructure your Data Library without starting from scratch: **Clone** duplicates a dataset into a fully independent copy, and **Move** relocates a dataset or folder to a different place in your folder hierarchy. ## Cloning a dataset Cloning creates a new, independent dataset that starts as an exact copy of the original. The clone has its own name, its own batches, and its own Views. Changes to the clone do not affect the source, and changes to the source do not affect the clone. ### When to clone - You want to experiment with a dataset's transformation pipeline without touching the version your team relies on. - You need a snapshot of a dataset at a point in time as a reference copy. - You want to build a variant of an existing pipeline that starts from the same raw data but diverges from there. ### How to clone a dataset **Prerequisite**: You have access to the dataset. 1. In the Data Library, click the dataset you want to clone. The dataset panel opens on the right. 2. In the panel header, click the **Clone dataset** icon (the copy/duplicate icon). You can also open the dataset's **⋯** menu and choose **Clone dataset**. ![Dataset panel header for store_transaction with a Clone dataset tooltip over the copy icon next to the Open button](https://mammoth.io/docs/images/20260505_060803_Screenshot2026-04-301553481.webp) 3. The clone dialog opens, titled **Clone {dataset name}**. The name field is pre-filled as `{original name} 2`. Edit it if you want a different name. 4. Under **Include in the clone**, choose what to copy: | Option | Default | What it does | | --- | --- | --- | | **Batches** | On | Copies all rows from every batch in the source dataset into the clone. Uncheck this to create an empty dataset with the same schema but no data. | | **Views** | On | Copies Views and their transformation pipelines into the clone. If the dataset has more than one View, a dropdown lets you choose **Clone all views** or **Clone selected views**; the selected list shows each View's task count. Each View in the clone is independent—editing it does not change the source View. This option is not available in every workspace. | 5. Click **Clone dataset**. The dialog closes immediately. The button is disabled while the name is empty. **Expected result**: The clone appears in the file list while Mammoth copies the data in the background. ![Clone store_transaction dialog with the name store_transaction 2, Batches and Views checked, and Cancel and Clone dataset buttons](https://mammoth.io/docs/images/20260505_060956_Screenshot2026-04-301553231.webp) ### What happens after you click Clone dataset The clone appears in the file list **straight away**, so you don't wait for a confirmation before you can keep working. It shows: - The name you entered - **0 bytes**: this is expected. The dataset record is created instantly, but the actual data is copied by a background job. The size updates once that job finishes (usually within seconds to a few minutes depending on dataset size). - The same row and column count as the source, once the copy is complete. A **"Clone completed"** toast notification appears at the bottom of the screen when the background job finishes. ![Data Library with store_transaction 2 shown as Duplicating store_transaction at 0 bytes, and a Clone completed message at the bottom](https://mammoth.io/docs/images/20260505_061219_Screenshot2026-04-301554321.webp) > **Why 0 bytes at first?** Mammoth registers the clone in the library immediately so it appears in your file list without delay. The actual data copy runs as an async background job. The 0-byte state is temporary—refresh after a moment if the size hasn't updated. ### What the clone includes | Item | Copied? | Notes | | --- | --- | --- | | Column schema | Yes | All columns with their names and data types | | Row data | Yes (default) | All batches—uncheck **Batches** to skip | | Display properties | Yes | Column display settings carry over | | Views and pipelines | Yes (default) | Each View is a fully independent copy—uncheck **Views** to skip | | Dataset name | Customizable | Pre-filled as `{name} 2`, edit before cloning | | Folder location | Same folder | The clone appears in the same folder as the source. A clone made into another project through the API lands at that project's root. | | Append history (batch order) | Yes | All batches are copied in their original order | ### Cloning via the API Send a create-dataset request with `ds_creation_type: "clone"` and a `dataset_spec`. The same request is what the dialog sends. | Field in `dataset_spec` | What it does | | --- | --- | | `source_ds_id` | The dataset to copy | | `ds_name` | Name of the clone. If you omit it, the name is `{original name} copy` (note: *copy*, not *2*). The `" 2"` suffix is added by the UI. Pass a `ds_name` if you want a predictable name. | | `clone_dataview_ids` | IDs of the Views to copy. Defaults to none. | | `exclude_data` | Set to `true` to skip the batches. Defaults to `false`. | | `target_project_id` | Optional. Clones into another project of the same workspace. Defaults to the source dataset's own project. | With `target_project_id`: - The target project must be in the same workspace as the source. - You need permission to create datasets in the target project and to read the source dataset. Otherwise the request fails with "You cannot create datasets in the target project, or it is not in this workspace" or "You do not have permission to read the dataset being copied". - The clone lands at the project root, not in a folder. - If the source was already copied into that project, the request returns the existing copy instead of creating another. The Mammoth app has no option to pick another project in the clone dialog. --- ## Moving datasets and folders The Move feature lets you reorganize datasets and folders anywhere within your current project. You can move a single item, a folder (with all its contents), or multiple items at once. > **Note:** Move works within the current project. To get a dataset into another project, clone it there through the API (see [Cloning via the API](#cloning-via-the-api)). ### How to move a single dataset **Prerequisite**: You have Update permission on the dataset. 1. In the Data Library file list, hover over the dataset row and click the `···` **(more options)** menu that appears on the right. 2. Click **Move to**. The dataset panel also has a **Move to** icon button. ![Dataset panel header for store_transaction with a Move to tooltip over the folder-arrow icon](https://mammoth.io/docs/images/20260505_061243_Screenshot2026-04-301555341.webp) 3. The **Move File** dialog opens. It shows a multi-column folder browser with a search box in the header and a breadcrumb. Only folders in the current project are listed. ![Move File dialog with a three-column folder browser, a Search box, breadcrumb, Destination F2, and a Move to F2 button](https://mammoth.io/docs/images/20260505_061402_Screenshot2026-04-301556131.webp) 4. Click through the folder columns to navigate to your destination. Each click on a folder: - Opens that folder's contents in the column to the right - Updates the breadcrumb at the top - Updates the **Destination:** bar at the bottom with the selected folder name 5. When the **Destination:** bar shows the right folder, click the **Move to "[Folder Name]"** button. The button is only active when a valid destination is selected. **Expected result**: A toast, **Item moved successfully**, appears with an **Undo** action for about five seconds. The dataset disappears from its current location and appears in the destination folder. The folder's file count in the parent list updates immediately. For example, a folder that showed `(1 File)` now shows `(2 Files)`. ### How to move a folder Moving a folder moves the folder itself *and everything inside it*, including all datasets and any nested sub-folders. 1. Hover over the folder row and click the `···` menu. 2. Click **Move to**. 3. The **Move Folder** dialog opens with the same column-browser UI as Move File. 4. Navigate to the destination and click **Move to "[Folder Name]"**. ![Folder F1 selected in the Data Library with a Move to tooltip in its panel, which lists a dataset and the F2 subfolder](https://mammoth.io/docs/images/20260505_061616_Screenshot2026-04-301557261.webp) > **Circular move prevention:** You cannot move a folder into itself or into any of its own sub-folders. Those destinations are disabled in the column browser. ### Moving multiple items at once To move several datasets, folders, or both in one operation: 1. Select items using the checkboxes in the file list (click the checkbox column on the left of each row). 2. A multi-selection panel appears showing how many items are selected. 3. Click **Move to** in the panel. 4. The same column-browser dialog opens. Navigate to the destination and confirm. All selected items move to the same destination folder in a single operation. The toast reads "N items moved successfully" and also offers **Undo**. ### Moving items by drag and drop Select one or more rows and drag them onto a folder row. A "Moving N items to {folder}" message appears with an **Undo** action. If you click it, the message **Action undone** confirms the items are back. ![Multiple items selected panel for two datasets with Delete and Move to buttons](https://mammoth.io/docs/images/20260505_061705_Screenshot2026-04-301558141.webp) ### Moving an item to the root level To move a dataset or folder out of all folders and back to the project root: 1. Open the `···` menu and click **Move to**. 2. In the column browser, navigate back to the root level using the breadcrumb at the top. 3. When no folder is actively selected (you're at the root), the **Destination:** bar reflects the root, and you can confirm the move. ### Creating a new folder during a move If you want to move an item into a folder that doesn't exist yet, you don't have to close the dialog and create the folder separately. The browser has a **+ New Folder** button. Click it, enter a name in the **Create Folder** dialog, and the new folder is created. Then click into it to set it as the destination before confirming the move. ![Create Folder dialog with a New Folder name field and a disabled Create Folder button over the Move Files dialog](https://mammoth.io/docs/images/20260505_061808_Screenshot2026-04-301558431.webp) ### Searching for a destination folder A **search bar** sits in the dialog header. Type part of a folder name to filter the visible folders across all levels. This is useful when your Data Library has many nested folders and navigating column by column would take too long. ## Permissions and background processing ### Permissions To move a dataset or folder you must have **Update** permission on each item being moved. If you lack permission on any selected item in a bulk move, the entire operation is blocked and an error is shown. ### Move runs in the background Like clone, move is an async operation. Mammoth accepts the request immediately and returns a job ID. A background job performs the actual data and metadata update. For most moves, this completes in under a second and the UI updates without any visible delay. For very large bulk moves, there may be a brief moment before all folder counts update. ## Limitations | Limitation | Details | | --- | --- | | Move is project-scoped | You cannot move datasets or folders to a different project. To copy a dataset into another project of the same workspace, use the API clone with `target_project_id`. | | Folder cannot move into itself or its own descendant | These destinations are disabled in the column browser, and so is the item's current folder. | | Views are not independently movable | Views belong to their parent dataset. Moving the dataset moves its Views with it. | | Clone location in the app | A new clone made in the app appears in the same folder as the source. Move it after cloning if needed. | | Clone with metric-based Views | If a source dataset has Views whose transformation rules reference metrics, the cloned Views may not behave correctly. This is a known limitation. Review cloned View pipelines before relying on them. | ## Related articles - [The dataset panel](https://mammoth.io/docs/learn/data-library/dataset-panel/): Full reference for the dataset side panel, including all action buttons - [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/): Append or replace data in a dataset after it's been created --- # The dataset panel URL: https://mammoth.io/docs/learn/data-library/dataset-panel/ · Updated: 2026-11-02 Reference for the Mammoth dataset panel: header actions, Overview with Views and preview, Settings and schema, Batches, and Automations sections. Click any dataset row in the Data Library and the **dataset panel** opens on the right side of the screen. The dataset list compresses to the left half; the panel fills the right. This page is for anyone who works with datasets. Start with the section you need: [Overview](#section-1-overview), [Settings](#section-2-settings), [Batches](#section-3-batches), or [Automations](#section-4-automations). The panel is a single scrollable surface divided into four collapsible sections (**Overview**, **Settings**, **Batches**, and **Automations**). It gives you everything you need to understand, configure, and manage a dataset without leaving the Data Library. The raw data grid lives inside Overview, not as a separate top-level section. ## Opening and closing the panel - **Open**: Click any dataset row in the file list. - **Close**: Click the **×** in the top-right corner of the panel. ![Data Library file list on the left and the dataset panel on the right with an Open button, action icons, and an Overview section](https://mammoth.io/docs/images/20260505_092625_Open_close_preview_panel1.webp) ## Panel header The header is always visible regardless of how far you scroll inside the panel. | Element | Description | | --- | --- | | **File icon** | Reflects the dataset's source type (spreadsheet, database, API, etc.) | | **Dataset name** | Bold title: the name you gave the dataset on upload. Click the name, or the pencil (**Rename**) icon next to it, to rename | | **Last updated** | Relative timestamp of the most recent change (hover for the full date) | | **× close button** | Dismisses the panel | ### Renaming a dataset Click directly on the dataset name in the header to rename it in place. There is no separate menu or modal. 1. Click the dataset name. It turns into an editable text field pre-filled with the current name. 2. Type the new name (up to 300 characters). 3. Press **Enter**, or click anywhere outside the field, to save. If you clear the field or leave the name unchanged, the field reverts to the original name without saving. On success, a **Rename successful** confirmation appears; if the rename fails (for example, an authorization error), the name reverts, the field re-opens, and an error message is shown. > **Note:** You can't rename a dataset that needs attention (for example, a corrupted or password-protected file awaiting action). The name isn't clickable until the issue is resolved. ### Action buttons A row of buttons sits below the header. The primary **Open** button comes first, followed by icon buttons; hover an icon to see its name. Which buttons appear depends on the dataset's type. | Button | What it does | | --- | --- | | **Open** | Opens the dataset in the data editor. It turns red when the dataset's pipeline has errored, and is disabled while the dataset is processing. | | **Refresh** | Appears for webhook datasets that have pending updates | | **Clone dataset** | Duplicates the dataset. See [Cloning and moving datasets](https://mammoth.io/docs/learn/data-library/clone-move-data/). | | **Add or Replace data** | Starts the [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/) workflow. Appears only when the dataset has views and a file-related source. | | **Retrieve latest data** | Pulls the newest data for a dataset from a third-party source | | **Move to** | Relocates the dataset to a different folder | | **More options** (**⋮**) | The remaining actions, such as Settings, View activity, Rename, and Automations | | **Trash** (far right) | Moves the dataset to Trash. See [Trashing a dataset](https://mammoth.io/docs/learn/trash-recovery/#trashing-a-dataset) for the confirmation flow and the 30-day recovery window. It is **not** an instant, permanent delete. | ## Navigating the panel A column of dots runs down the left edge of the panel—one per section (**Overview**, **Settings**, **Batches**, **Automations**). It is hidden while a dataset is processing or needs action. The active dot highlights as you scroll. Clicking a dot jumps directly to that section with a smooth scroll. Use this when a dataset has many batches and you want to reach Settings or Automations quickly without scrolling through them. ## Section 1: Overview ![Dataset panel Overview section with a views table listing View 1 and a Preview grid of Customer id, Customer name, and Item](https://mammoth.io/docs/images/20260505_092816_overview_section1.webp) The **Overview** section lists every View that belongs to this dataset. The section header shows the total View count as a badge (for example, **1 View**). ### What is a view? A View is the output of a transformation pipeline built on top of a dataset. Each View has its own pipeline—a sequence of tasks (filters, joins, formulas, aggregations)—applied to the dataset's source rows. You can have multiple Views per dataset, each producing a different shape of data for different purposes. ### The views table Each row represents one View: | Column | What it shows | | --- | --- | | **Checkbox** | Selects the View for a bulk action | | **View name** | Clickable—opens that View full-screen | | **Last updated** | When the View data was last refreshed | | **Tasks** | Number of transformation tasks in this View's pipeline | | **Rows** | Current row count after the pipeline runs | | **Columns** | Current column count | | **Auto-sync** | Whether the View re-runs automatically when new data arrives | | **⋮ menu** | Per-View actions: Open, Settings, View activity, Auto-sync, Rename, Duplicate, Reset, Delete, and Automations. Apply template, Save as template, and Summary appear when enabled for your workspace. | The **Auto-sync** column appears only when it is enabled for your workspace. Select one or more Views with the checkboxes and the section header turns into a toolbar with **Enable auto-sync**, **Disable auto-sync**, and **Delete selected views**. **Delete selected views** is disabled when every View is selected. ### View status indicators Most of the time a View row shows no icon—that means it's healthy and up to date. Two indicators can appear when something needs attention: | Indicator | Where it appears | What it means | | --- | --- | --- | | **Red error icon** | View name column | The pipeline failed on its last run. Open the View to see which task errored. | | **Orange warning icon** | Auto-sync column (next to ON/OFF) | A data update is pending for the View. The tooltip reads "Data may be inconsistent. Check Dataflow Monitor to manage Pending data updates." See [Monitor](https://mammoth.io/docs/learn/monitor/). | The **Auto-sync** column itself shows plain **ON** or **OFF** text. There is no icon for Auto-sync OFF; read the text. ### View Auto-sync **Auto-sync ON** means the View's pipeline re-runs automatically when new data arrives in the dataset. **Auto-sync OFF** means new data does not trigger a pipeline run automatically. Use the per-View toggle in the **⋮** menu, or the bulk **Enable auto-sync** and **Disable auto-sync** actions. When you select a single View, the panel header shows its name with its column, row, and task counts and a **Data sync: ON/OFF** indicator. > **Note:** Auto-sync here refers to View-level automation—whether this View's pipeline responds to new data. It is separate from the dataset-level Update Method (Combine vs. Replace) and from Export Auto-sync. Each operates independently. ### The preview grid The **Preview** grid, nested inside the Overview section, shows the raw source rows from your dataset. Unlike Views, the Preview reflects the original data *before* any pipeline transformations are applied. The section header shows the column and row count as a persistent badge, such as **4 Columns | 4 Rows**. ![Preview section showing 3 Columns and 4 Rows with Customer id, Customer name, and Item, below the Open button and action icons](https://mammoth.io/docs/images/20260505_092921_preview_section1.webp) - Row numbers are shown on the far left. - The grid has a fixed height inside the panel. To see all rows in a batch, click the batch name in the **Batches** section to open a full-screen preview. > **Tip:** If your View is returning unexpected results, check the Preview first. It shows what the pipeline is working with—if the source data looks wrong here, the issue is upstream of the pipeline. ## Section 2: Settings The **Settings** section controls how new data is incorporated into the dataset, what schema the dataset uses, and whether cell editing is enabled. A **Data settings** button in the section header opens the **Data Preview** modal for the dataset. It appears only for file-based datasets that can be reprocessed. The modal covers the delimiter and quote character, column headers (initial rows to skip, which row holds the column names), the date format for each date column, and a review of rows that require attention (**Discard all** / **Restore all**). ![Settings section with New Data definitions: Update Method set to Replace the older data, Column Mapping set to Map with existing, Cell editing Enabled](https://mammoth.io/docs/images/20260505_093000_settings_section1.webp) ### New data definitions These settings control what happens when you add new data to the dataset via Add or Replace Data. They appear for file-based and third-party datasets. For third-party datasets the card sits under a **Retrieve latest data** button, which asks for confirmation and then refreshes the dataset. Change **Update Method** directly from the dropdown in the panel; it saves immediately. The **Column Mapping** row shows **Map with existing** or **Create new**, and its pencil icon opens the full settings dialog. The Column Mapping row is hidden for third-party datasets. #### Update method | Option | What it does | Best for | | --- | --- | --- | | **Combine with older data** *(default)* | New data is appended as a new batch. All previous batches are preserved. | Incremental loads—daily sales, event logs, transaction feeds | | **Replace the older data** | New data replaces the existing batch. Previous data is deleted. | Full snapshots—weekly inventory exports, complete dimension refreshes | #### Column mapping | Option | When to use it | | --- | --- | | **Map with existing columns** *(default)* | Your new file has the same column names as the original upload. Mammoth matches them automatically, so no action is needed. | | **Create new column mapping** | The source file's column names have changed completely and you want Mammoth to treat the new structure as the definitive schema, discarding the old one. | #### Changing how new data is combined or mapped You may want to change these settings before uploading a new batch—for example, switching from "Combine" to "Replace" for a periodic full refresh, or adjusting what happens when the incoming file has a column in a different format. **Prerequisite**: You have Edit-level access to the dataset. To change the column mapping or the type-mismatch behavior, click the **pencil icon** in the Column Mapping row. This opens the **Combine / Replace Settings** dialog. ![Combine / Replace Settings dialog with Update Method, If column type doesn't match, and Column Mapping dropdowns, plus a Save changes button](https://mammoth.io/docs/images/20260505_093049_combine-replace-settings-modal1.webp) **Update Method** controls what happens to your existing data when you load new data: - **Combine with older data**: new data is added as an additional batch alongside the existing one. Use this when you're adding new records over time (for example, monthly sales files). - **Replace the older data**: new data completely overwrites the existing batch. Use this when each upload is a full, current snapshot (for example, a weekly inventory export that supersedes the previous one). **If column type doesn't match** controls what Mammoth does if the incoming file has a column in a different data type than the schema expects: - **Convert destination column to text**: Mammoth changes the schema column to Text to accept all values without data loss. - **Convert incompatible values to null**: the column type stays as-is; any incoming values that don't fit are stored as null. - **Do not update the dataset**: the load is cancelled entirely if any type conflict is detected. Use this when type-correctness is critical and you'd rather fail loudly than load dirty data. **Column Mapping** controls how incoming columns are matched to the schema: - **Map with existing columns**: Mammoth matches columns by name. The schema stays unchanged. - **Create new column mapping**: Mammoth rebuilds the schema from the incoming file. Use this when the source has been restructured. A mapping list appears where you can set the incoming names (aliases) that feed each destination column, switch individual columns on or off, and tick **All destination columns must be mapped** so new data is added only when the column count matches. Changes made here apply to the dataset's settings going forward. Click **Save changes** to apply them before your next upload. **Expected result**: The Settings section shows the new values. #### Cell editing The **Cell editing** row shows **Enabled** or **Disabled**. Switching it opens an **Enable Cell Editing** or **Disable Cell Editing** confirmation. When it is enabled, users can click any cell in a View built on this dataset and edit the value inline. > **Note:** Cell editing is a dataset-level setting. When enabled, it applies to all Views built on this dataset. > **Before you enable it:** turning Cell editing on re-runs every pipeline on the dataset, and it's recommended only for datasets under roughly 500,000 rows. Once a cell has been edited, you can't disable Cell editing again until all edited cells are removed. ### Properties For datasets that connect to an external source, the Settings section also lists **Properties**: the **Connection**, the **Query** (editable), the **Datapull type** for SFTP sources, and, for webhook datasets, the **Webhook URL**, an API key, and a **Secure header** toggle. ### Dataset recipe A dataset created from messy data or a PDF interpretation shows a **Dataset recipe** block. It holds a summary of the recipe, an edit pencil (disabled when the recipe isn't editable), and, where relevant, how many other datasets were created together with this one and a **View recipe** link. ### Schema The **Schema** sub-section lists every column in the dataset. The header shows the column count (for example, **6 columns**). The list is read-only; click the **pencil icon** next to the Schema header to open the **Column Manager**, where you rename, retype, reorder, add, and remove columns. The Schema sub-section appears only for file-related sources, and only when it is enabled for your workspace. #### Editing the schema in the Column Manager ![Schema Settings dialog (Column Manager) listing columns with their data types, a toolbar with Add column, Format names, Copy column names and Add batch info, a Search columns box, and Discard and Save changes buttons](https://mammoth.io/docs/images/20261009_015000_Column-Manager-Schema-Settings.webp) The Column Manager (titled **Schema Settings**) shows every column as a row, with a toolbar above it: - **Add column**: introduce a new column. - **Format names**: standardize names in bulk (see below). - **Copy column names**: copy all names to your clipboard. - **Add batch info**: add batch metadata as columns (see [Add batch info to the dataset](#add-batch-info-to-the-dataset)). All views of this dataset are affected. - **Search columns**: filter the list by name. On each row you can: - **Rename a column**: edit its name. Empty or duplicate names block saving. - **Change a column's type**: switch between Text, Number, and Date. Change this if Mammoth inferred the wrong type on upload (for example, a numeric ID that should be treated as Text). If a type change fails, a **Failed to change type** message lists the columns that kept their current type. - **Reorder columns**: drag a row up or down. - **Remove a column**: removing is reversible until you save; use **Restore column** to bring it back. If a column is used in tasks, a warning explains that deleting it may cause issues, and you can choose **Delete anyway**. You can also select several columns at once (**Select by filter**, **Invert selection**). Changes are staged, not applied immediately. The footer shows how many pending changes you have, with **Discard** and **Save changes** buttons. Nothing changes in the dataset until you click **Save changes**. #### Renaming columns in bulk If your source file uses inconsistent naming—all-caps, mixed separators, abbreviated labels—use **Format names** to standardize them in one step rather than renaming each column individually. ![Dataset settings dialog with Format names open, showing snake_case, camelCase, and Describe options and a Describe the format you need field](https://mammoth.io/docs/images/20260505_093734_schema-editor-format-names1.webp) Click **Format names** to reveal these options: - **snake_case**: converts all column names to lowercase with underscores (for example, `Purchase Date` → `purchase_date`). Useful when downstream tools or SQL queries expect this format. - **camelCase**: converts all column names to camelCase (for example, `Purchase Date` → `purchaseDate`). Common for JavaScript or API-connected workflows. - **Title Case**: converts all column names to Title Case. - **Describe**: describe what you want in plain English in the **Describe the format you need...** field (for example, "Capitalize the Item column" or "Make all names lowercase and remove spaces") and click **Generate**. Mammoth uses AI to apply the transformation across all columns. > **Tip:** Use **Copy column names** if you need to paste the current column names into a formula, external spreadsheet, or documentation. It copies all names to your clipboard at once. ## Section 3: Batches ![Batches section with an Add new data button, a table of two batches with Name, Date, Row Count, Source, and State, and Add Batch Info to Dataset](https://mammoth.io/docs/images/20260505_093854_Screenshot2026-04-291512571.webp) The **Batches** section lists every batch that belongs to the dataset, with the batch count in the header. Each file upload, API sync, or manual data load creates one batch. Click **Add new data** (file-related datasets only) to append or replace data. This opens the Add or Replace Data workflow. When an added batch needs review, a warning callout, **Added batches require your input**, appears in the panel with a **Batch Settings** button that opens the review. Such batches sit at the top of the table with a **Pending** state (click it to open Batch Settings) or **Applying recipe** while a recipe runs. ### The batches table | Column | Description | | --- | --- | | **#** | Checkbox with the batch's sequence number | | **Name** | Source file name or connector identifier | | **Date** | Timestamp of when the batch was created | | **Row Count** | Number of rows in this batch | | **Source** | Icon indicating source type (file, API, connector, etc.) | | **State** | Current batch state (see below) | Click a batch name to open a full-screen preview modal showing all rows in that batch. The table shows 10 batches per page. ### Batch states | State | Meaning | | --- | --- | | **Active** | Rows in this batch are live—included in all Views and pipeline runs | | **Suspended** | Rows are excluded from Views and pipelines. The batch is preserved and can be unsuspended at any time. | | **Pending Delete** | A [retention policy](https://mammoth.io/docs/learn/data-sources/batch-management/) selected this batch and is waiting for approval. Approve the row's **Delete** or **Suspend** button to carry it out. | Suspending a batch is reversible. Deleting a batch permanently removes its rows from the dataset. ### Batch actions - **Select batches**: Use the checkboxes to select one or more batches, then choose an action from the toolbar that appears. - **Suspend / Unsuspend**: Toggle a batch between Active and Suspended without losing the data. A confirmation says that suspending removes the batch from all associated views and unsuspending restores it. - **Delete**: Permanently remove selected batches. A confirmation modal lists the batches before deletion. Some batches can't be deleted separately from their dataset yet, or aren't ready to delete; the panel tells you when that is the case. ### Retention policy A retention policy deletes or suspends batches automatically, by age, by count, or by a condition you describe. When no policy exists, the **Set up retention policy** link at the bottom of the Batches section opens the policy settings. It is available on plans that include data retention. When a policy exists, a **Retention Policy** banner shows its status, a **Run Policy** button, and its last and next run. When a policy awaits approval, bulk **Approve All** and per-batch buttons appear. See [Batch management](https://mammoth.io/docs/learn/data-sources/batch-management/) for the details. ![Retention Policy dialog with Time-based, Count-based, and Condition-based rule types, Run Mode set to Request Approval, a notification recipient, and a Policy Summary](https://mammoth.io/docs/images/20261009_013937_Retention-Policy-modal.webp) ### Add batch info to the dataset The **Add Batch Info to Dataset** link at the bottom of the Batches section opens a column selector. It lets you import batch metadata as new columns on the dataset—once added, they flow into every View built on it, the same as any other column. The link is disabled when the dataset has no batches. **Add batch info** in the Column Manager offers the same choice. Available metadata columns: | Metadata column | What it contains | | --- | --- | | **Batch ID** | Internal identifier for the batch | | **Date** | Timestamp of when the batch was created | | **Source (JSON)** | Source details for the batch, as JSON | | **Name** | Source file name or connector identifier for the batch | | **Row Count** | Number of rows in that batch | Click **Submit** to add the selected columns, or **Cancel**. Columns are prefixed with `batch_`, for example `batch_Row Count`. All views of this dataset are affected. Once added, these columns appear alongside your data columns in every View and can be used in filters, formulas, and exports. This is useful when you need to trace which rows came from which upload, or when you want to filter data by batch date in a pipeline. ## Section 4: Automations ![20261008_060321_automtion-list-shown-in-dataset-panel.png](https://mammoth.io/docs/images/20261008_130441_20261008_060321_automtion-list-shown-in-dataset-panel.webp) The **Automations** section lists every automation that's linked to this dataset, for example a scheduled refresh or a downstream automation triggered by new data landing here. The section header shows a count badge (for example, **Automations (0)**). - **New automation**: Opens the create automation modal, limited to the automation types that apply to a dataset (Dataset Refresh for third-party datasets and Data Consolidation), to create an automation linked to this dataset. See [Automations](https://mammoth.io/docs/learn/automations/). - If automations are already linked, each one appears as a row with its name, details, type, and status. ### Empty-state suggestions If no automations are linked to this dataset yet, the section shows **No automations linked to this dataset** and an **Automation Options** accordion. Each option is a button with an info tooltip: - If the dataset is connected to a third-party source (API, database, cloud app), **Set-up auto refresh** pre-fills a Dataset Refresh automation for this dataset. - **Consolidate files into this dataset** always appears and pre-fills a Data Consolidation automation with this dataset already selected as the destination. Clicking either suggestion opens the Create Automation modal with the corresponding type and destination preset already filled in, so you only need to pick the remaining settings (such as the source folder or schedule) before saving. ![20261008_060520_new-automation-not-attached-dataset-section.png](https://mammoth.io/docs/images/20261008_130501_20261008_060520_new-automation-not-attached-dataset-section.webp) See [Automations](https://mammoth.io/docs/learn/automations/) for how automations work once created. ## Understanding the data hierarchy Every dataset in Mammoth follows this structure: ```plaintext Dataset └── Batch(es) ← individual data loads (each file upload = one batch) └── View(s) ← transformation pipeline outputs built on the batches └── Pipeline tasks ← filters, formulas, joins applied to produce the View ``` - **Batches** are the raw inputs: the individual data loads you can suspend, delete, or retire with a retention policy. - **Views** are the processed outputs—shaped by whatever pipeline tasks you've built. - The **Preview** grid inside Overview shows batch data (raw). When you open a View, you see pipeline-transformed data. ## Related articles - [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/): Step-by-step guide to appending or replacing data in a dataset - [Parameters and snippets](https://mammoth.io/docs/learn/data-library/parameters-snippets/): Reusable values and logic blocks across pipelines - [Trash and recovery](https://mammoth.io/docs/learn/trash-recovery/): How dataset deletion, restore, and the 30-day recovery window work --- # Data Library URL: https://mammoth.io/docs/learn/data-library/ · Updated: 2026-11-02 The Data Library holds a project's datasets plus reusable Parameters and Snippets. Find guides to the dataset panel, adding data, cloning, and moving. The Data Library is where your project's datasets live, alongside the reusable pipeline components (Parameters and Snippets) that stay in sync across every pipeline that references them. Change a Parameter once, and every pipeline that uses it updates automatically. This section is for analysts and technical users who manage datasets. Open the Data Library from the left sidebar of your workspace. A tab bar at the top switches between **Datasets**, **Automations**, and **Parameters**; the Automations and Parameters tabs appear only when they are enabled for your workspace, and Parameters also depends on your plan. Then pick a guide below or use [Where to start](#where-to-start). ## In this section ### The dataset panel The side panel that opens when you click a dataset: Overview (Views and raw data preview), Settings (update method, schema, cell editing), Batches, and Automations, all in one place. [The dataset panel](https://mammoth.io/docs/learn/data-library/dataset-panel/) ### Add or replace data Append new rows to an existing dataset or replace it entirely, from a file upload or from another dataset in your project. [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/) ### Cloning and moving datasets Duplicate a dataset into an independent copy (including into another project through the API), or reorganize your Data Library by moving datasets and folders. [Cloning and moving datasets](https://mammoth.io/docs/learn/data-library/clone-move-data/) ### Parameters and snippets Define a value or a reusable code block once and reference it across every pipeline that needs it. These live on the **Parameters** tab. [Parameters and snippets](https://mammoth.io/docs/learn/data-library/parameters-snippets/) ## Where to start | Goal | Start with | | --- | --- | | I want to understand what a dataset contains before working with it | [The dataset panel](https://mammoth.io/docs/learn/data-library/dataset-panel/) | | I need to load new data into an existing dataset | [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/) | | I want a safe copy to experiment with, or need to reorganize folders | [Cloning and moving datasets](https://mammoth.io/docs/learn/data-library/clone-move-data/) | | I'm repeating the same value or SQL logic across pipelines | [Parameters and snippets](https://mammoth.io/docs/learn/data-library/parameters-snippets/) | --- # Parameters and snippets URL: https://mammoth.io/docs/learn/data-library/parameters-snippets/ · Updated: 2026-11-02 Define reusable values (Parameters) and code blocks (Snippets) once and reference them across Mammoth pipelines. Covers creating, editing, and scope. Parameters and Snippets let you define reusable values and code once and reference them across all your pipelines. When you change a parameter or snippet, every pipeline that uses it is flagged as stale, so you can rerun the affected pipelines and keep your data consistent without hunting down every place a value was used. This page is for analysts and technical users who build pipelines. Start with [Parameters](#parameters) for single values or [Snippets](#snippets) for reusable logic. ## Parameters A **Parameter** is a named value (a number, a text string, or a date) that you can plug into pipeline conditions and filters. Instead of typing `100` into ten different filters, you define a `Max_Units` parameter with value `100` and reference `{Max_Units}` everywhere. To change the threshold, you update the parameter once. ### Parameter types | Type | Use for | Example value | | --- | --- | --- | | **Number** | Thresholds, counts, amounts | `100`, `0.75` | | **Text** | Status values, category names, flags | `"Active"`, `"Yes"` | | **Date** | Cut-off dates, reporting periods | `2026-04-01` | ### Reference syntax To reference a parameter in a pipeline condition, use curly braces around the parameter name: ```plaintext {parameter_name} ``` For example, a filter like `WHERE Discount < {Max_Discount}` will substitute the parameter's current value at runtime. ## Snippets A **Snippet** is a reusable block of SQL code. Where parameters hold a single value, snippets hold logic, such as a SQL fragment, a subquery, or a WHERE clause. Snippets are embedded in tasks using double-brace syntax: ```sql SELECT {{column_list}} FROM orders WHERE {{standard_date_filter}} ``` Snippets can also reference parameters internally, so you can parameterize complex logic. A snippet's language is always SQL. ## The parameters library Open **Data Library** in the left sidebar, then click the **Parameters** tab (next to **Datasets** and **Automations**) to see all parameters and snippets for the current project. The tab appears only when the feature is enabled for your workspace, and creating or duplicating items requires a plan that includes Parameters; on other plans the **New Parameter** button shows a plan badge. ![Parameters library with a General group of three parameters, a Search box, Filter, and New Parameter button, and Name, Value, Subtype, and Uses columns](https://mammoth.io/docs/images/20260418_190007_parameters-list1.webp) The library shows every parameter and snippet grouped by **category**. Each row displays: - **Name**: the identifier used in `{name}` references - **Description**: what this parameter represents - **Value**: the current value - **Subtype**: Number, Text, or Date (for parameters); SQL (for snippets) - **Uses**: how many pipelines reference this parameter or snippet Stale rows are highlighted. A banner at the top, **N parameter(s) updated. Rerun affected pipelines to apply changes.**, offers **Rerun stale pipelines**. ### Searching and filtering Use the **Search parameters** box to find by name. Click **Filter** to narrow by type (parameters or snippets), subtype (Date, Number, Text, SQL), or category. **Group by** switches the table between None, Category, and Type (Category is the default). The **Learn more** icon links to help. ## Creating a parameter **Prerequisite**: You have Edit-level access to the project. 1. Click **New Parameter** in the toolbar. 2. In the **New Parameter** dialog, choose the **Parameter** card, then fill in the form: | Field | Required | Notes | | --- | --- | --- | | **Name** | Yes | Must start with a letter or underscore. Can contain letters, numbers, underscores. No spaces. Max 100 characters. | | **Type** | Yes | Number, Text, or Date. Cannot be changed after creation. | | **Value** | Yes | Must match the selected type. Dates use a date picker and are stored as YYYY-MM-DD. | | **Category** | No | Assign to an existing category, or leave in **General**. Under "More options". | | **Description** | No | Shown in the library and in the parameter picker. Under "More options". | 3. Click **Create Parameter**. **Expected result**: The parameter appears in the library under its category. > **Scope:** every parameter created from this dialog is **Project**-scoped, so there's no Scope field to set here. See [Scope: Project vs workspace](#scope-project-vs-workspace). > **Note:** Parameter names must be unique within their scope. A project-scoped parameter named `Threshold` and a workspace-scoped parameter named `Threshold` can coexist, but you cannot have two project-scoped parameters with the same name. ## Editing a parameter **Prerequisite**: You have Edit-level access to the project. Click any parameter in the library to open its detail panel, then click **Edit**. You can also click the edit icon that appears when you hover over a row. ![Parameter detail panel for is_transaction with Edit and duplicate buttons, Properties showing value, category, reference syntax, and scope, and an empty Uses section](https://mammoth.io/docs/images/20260418_190110_parameter-detail-panel1.webp) You can update the value, description, and category. The **Name** is read-only once the parameter exists ("Name can't be edited"), and the **Type** and **Scope** cannot be changed. **What happens when you save an edit:** - All pipelines that reference this parameter are flagged as **stale**. The detail panel shows **Stale in N pipelines** with a **Rerun** button. - Stale banners with a **Rerun** button also appear in the SQL rule, Apply Filter, and Data check panels that use the changed value. - The change is recorded in the parameter's history (visible in the detail panel). ## Viewing parameter dependencies Every parameter's detail panel shows a **Uses** section listing each pipeline that references it, shown as a path of project, dataset, and view: ![Parameter detail panel for Pending_units with Uses 1, listing the path Marketing / Store Transaction / View 1](https://mammoth.io/docs/images/20260418_190154_parameter-uses-panel1.webp) This tells you exactly what will be affected before you make a change. ## Using a parameter in a pipeline condition When adding a condition to a pipeline filter, select **Parameter** as the value source in the third dropdown. A picker appears showing all available parameters: ![Add Condition dialog with Discount is less than Parameter chosen and a picker listing Pending_units, Number 100, with a New Parameter link](https://mammoth.io/docs/images/20260418_190227_add-condition-parameter-picker1.webp) **Prerequisite**: A parameter exists. 1. Open a pipeline and add or edit a filter condition. 2. In the value column (third dropdown), select **Parameter**. 3. In the picker that appears, search for and select the parameter. 4. The condition now uses the parameter. To create one without leaving the condition, use the **New Parameter** link in the picker. 5. At runtime, Mammoth substitutes the current parameter value. Parameters can also be used as inputs in Data check. **Expected result**: The filter uses the parameter's current value each time the pipeline runs. ## Stale pipelines When a parameter value changes, every pipeline using it is marked **stale**, meaning its output may no longer reflect the current parameter value. Mammoth does not rerun stale pipelines on its own; you start the rerun. - Stale parameters are highlighted in the library, and the banner at the top offers **Rerun stale pipelines**. - The detail panel shows **Stale in N pipelines** with a **Rerun** button, and the SQL rule, Apply Filter, and Data check panels show their own stale banner with **Rerun**. - A rerun starts **from the first task that uses the changed parameter**, not from the beginning, so unchanged upstream tasks are not re-run. ## Organizing with categories Both parameters and snippets can be grouped into **categories** for easier navigation. By default, all items go into **General**. Category headings in the library have inline rename and delete icons. To add or manage categories, click **+ Manage** next to the category pills under **More options** when you create or edit an item. The **Manage categories** dialog lets you name categories and give them colors. Deleting a category moves its items back to **General**. It does not delete the parameters or snippets themselves. ## Duplicating a parameter or snippet Open the detail panel (or hover over a row) and click the **duplicate icon** next to **Edit**. The **Duplicate Parameter** or **Duplicate Snippet** dialog opens with the name pre-filled as `{name}_copy`. Change the name or value if you like, then click **Create Duplicate**. Nothing is created until you click it. If the `_copy` name is already taken, you get "Name already in use", so choose another name. ## Deleting a parameter or snippet Open the detail panel and click the **trash icon** at the right of the header. - If no pipeline references the item, a confirmation asks "Are you sure you want to delete {name}? This action cannot be undone." Click **Delete** to confirm. - If a pipeline references it, the dialog says the item is used by pipelines and cannot be deleted, and lists each view with its task count. It offers only **Close**. Remove the references first, then delete. ## Working with snippets ### Creating a snippet Creating a snippet follows the same flow as parameters: 1. From the Parameters library, click **New Parameter** and choose the **Snippet** card. 2. Set: - **Name**: same naming rules as parameters - **Value**: the reusable SQL code block. There's no language selector; snippets are always SQL. Type `/param` in the field to reference a parameter. - **Category** and **Description** (optional, under "More options") 3. Click **Create Snippet**. **Expected result**: The snippet appears in the library and can be referenced with `{{name}}`. The name rules are the same as for parameters. Saving fails with "Snippets cannot reference other snippets (no {{...}} allowed)" if the code contains another snippet reference. > **Scope:** New parameters and snippets are always created as **Project**-scoped from this dialog—there is no Scope selector in the create form. Workspace-scoped items can exist (for example, created via the API), but you can't create one as Workspace-scoped from the current UI. > **Restriction:** Snippet code cannot reference other snippets (no `{{...}}` patterns inside snippet code). Snippets *can* reference parameters using `{parameter_name}` syntax. ### Using a snippet in a task In a SQL rule, click **Insert Snippet** and pick the snippet. Choose how to insert it: - **Reference** inserts `{{name}}`, which stays linked to the snippet. Later edits to the snippet reach the task. - **Paste value** inserts the snippet's current code as plain text, with no link to the snippet. ```sql SELECT customer_id, SUM(amount) FROM transactions WHERE {{standard_date_filter}} GROUP BY 1 ``` At execution time, Mammoth substitutes the snippet's code in place of `{{standard_date_filter}}`. ### Snippet dependencies Just like parameters, the snippet detail panel shows which pipelines use it and flags them as stale when the snippet code changes. Use **Rerun** to apply the change. ## Scope: Project vs workspace | | Project scope | Workspace scope | | --- | --- | --- | | **Visible in** | This project only | All projects in the workspace | | **Reference syntax** | `{name}` / `{{name}}` | Same syntax | | **Name uniqueness** | Unique within this project | Unique across the workspace | | **Best for** | Dataset-specific thresholds, view-specific logic | Shared org-wide standards (for example, fiscal year start or company-wide thresholds) | > **Creating Workspace-scoped items:** the **New Parameter** / **New Snippet** dialog in the Data Library always creates a **Project**-scoped item—there's currently no Scope selector there. Workspace-scoped parameters and snippets can exist in your workspace (for example, created via the API), and once they exist you'll see and reference them like any other, but you can't create one as Workspace-scoped from this dialog today. > **Scope cannot be changed** after a parameter or snippet is created. ## History and audit trail Every parameter and snippet keeps a history of changes in its detail panel. Each entry shows how long ago the change happened, with the old value struck through followed by the new value. This makes it easy to audit why a downstream dataset changed. Trace it back to a specific parameter edit. ## Related articles - [The dataset panel](https://mammoth.io/docs/learn/data-library/dataset-panel/): Full reference for the dataset side panel, including Settings and Batches - [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/): Step-by-step guide to appending or replacing data in a dataset --- # Batch management URL: https://mammoth.io/docs/learn/data-sources/batch-management/ · Updated: 2026-11-02 Master dataset versions with combine vs replace modes, batch identification, and automated historical tracking. Every time you add data to a Mammoth dataset—whether uploading files, refreshing connections, or running consolidations—you create a **batch**. Think of batches as individual data versions that preserve history. Understanding batches helps when your data changes over time, for example monthly financial reports, daily inventory snapshots, or data consolidated from several locations. ![Data Library dataset with a Batches panel listing five batches with name, date, row count, source, and Active state](https://mammoth.io/docs/images/20260324_112203_multiple_batches.webp) ## Understanding batches ### What is a batch? A **batch** represents a single data import or version within your dataset. Each batch maintains its own identity, metadata, and audit trail while contributing to the unified dataset view. #### Key characteristics - **Independent Identity**: Each batch has unique name, timestamp, and source information - **Historical Preservation**: All batches remain accessible for analysis and rollback - **Metadata Rich**: Captures source file, row count, and creation details - **Transformation Ready**: Pipeline tasks apply across all batches automatically #### Dataset-batch relationship ```plaintext Sales Dataset ├── April_Sales_North.csv (127 rows) - Batch 1 ├── April_Sales_South.csv (143 rows) - Batch 2 └── June_Sales_Combined.csv (298 rows) - Batch 3 Total Dataset: 568 rows across 3 batches ``` ### Why batches matter **Complete Audit Trail**: Track exactly what data came from where and when. Essential for compliance, debugging, and stakeholder confidence. **Version Control**: Roll back to previous states, compare versions, or analyze data evolution over time without complex backup systems. **Flexible Analysis**: View specific batches, compare batch-to-batch changes, or analyze data by source while maintaining the unified dataset view. ![Activity Log with Add data, Create dataset, Delete batches, and Update Batches events for the products_plant dataset](https://mammoth.io/docs/images/20260410_062412_Batchtimelineshowingdataevolutionwithaudittrail.webp) ## Batch creation methods ### Automatic batch creation Batches are created automatically through multiple pathways—no manual version management required: #### File Upload - Each file upload becomes a new batch - Batch inherits filename as identifier - Timestamp automatically captured #### Data Consolidation - Automated file processing creates batches per source file - No manual batch management is needed #### Dataset Refresh - In Combine mode, Live Connection updates create new batches and preserve historical data with each refresh - In Replace mode, a refresh deletes the previous batches and adds one new batch - Scheduled refresh maintains complete lineage in the Activity Log ## Combine vs replace: Choosing your update strategy The most critical batch decision is choosing **how new data integrates** with existing data. Mammoth provides two distinct approaches serving different business needs. ### Combine mode (append strategy) **Purpose**: Add new data while preserving all historical information **How it Works**: New data becomes an additional batch alongside existing batches. Dataset grows with each addition, maintaining a complete historical view. **Best for:** - **Building Historical Datasets**: Monthly sales reports accumulating year-over-year data - **Transaction Processing**: Daily transaction files building complete financial history - **Multi-Location Consolidation**: Regional data files combining into enterprise view - **Audit Trail Requirements**: Regulatory compliance needing complete data lineage **Example:** ```plaintext Initial State: April_Sales_Data.csv (127 rows) Add in Combine Mode: June_Sales_Data.csv (127 rows) Result: Dataset with 254 rows ├── Batch 1: April data (127 rows) └── Batch 2: June data (127 rows) ``` ![Dataset panel under New Data definitions with Update Method set to Combine with older data](https://mammoth.io/docs/images/20260324_112337_combine_interface_batch.webp) ### Replace mode (overwrite strategy) **Purpose**: Replace entire dataset content with fresh data **How it Works**: New data completely replaces previous dataset content. Previous batches are deleted, dataset maintains a consistent size. If every previous batch was suspended, the new batch is created suspended. **Best for:** - **Current State Reporting**: Daily inventory snapshots where only today matters - **Latest Data Only**: Pricing tables, employee directories, current status reports - **Error Correction**: Fixing incorrect data uploads - **Fixed Dataset Size**: Maintaining consistent memory footprint **Example:** ```plaintext Initial State: Yesterday_Inventory.csv (1,000 items) Replace Mode: Today_Inventory.csv (1,050 items) Result: Dataset with 1,050 rows └── Only today's data (previous data removed) ``` Use Replace Mode cautiously—previous data cannot be recovered once replaced. Consider backing up important historical data before replacing. ## Batch operations interface ### Adding data to datasets Open the **Add or Replace data** dialog from the dataset's menu in the Data Library, or with the **Add new data** button in the header of the **Batches (N)** section of the dataset's preview panel. Both are available only for file-based datasets, and **Add new data** is not shown on the standalone Dataset Settings page. See [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/) for the full walkthrough. ![Add or Replace data dialog with Upload file selected, Update Method set to Combine with older data, the PDF callout, and a disabled Submit button](https://mammoth.io/docs/images/20261009_013939_Add-or-Replace-data-dialog.webp) The dialog is titled with the dataset name followed by **Add or Replace data**. **Input File**: - **Upload file**: Drag-and-drop or browse for a single file. A callout explains that uploading a PDF replays the dataset's saved recipe automatically, while uploading a CSV or Excel file appends it directly by matching columns. - **Select existing**: Pick another dataset, or an unprocessed PDF, from the project. **Update Method**: - **"Combine with older data"**: Append mode preserving history - **"Replace the older data"**: Overwrite mode for current-state data - The dropdown is in the dialog and saves to the dataset as soon as you change it, without waiting for **Submit**. It applies to both **Upload file** and **Select existing**. **Column mapping**: - For files other than PDFs, a **Batch & Column Mapping settings** row shows **Default** or **Custom**. Select it to open **Combine / Replace Settings**, where you choose **Map with existing columns** or **Create new column mapping**, and set what happens **If column type doesn't match** (convert the destination column to text, convert incompatible values to null, or do not update the dataset). - **Replace and use the new file's columns**: shown only when Update Method is Replace and the file is not a PDF. Select it when the file has new or renamed columns; the dataset's columns become the file's columns. After you select **Submit**, the dialog closes and the new batch appears in the Batches list. It reads **Applying recipe** while Mammoth structures it, or **Pending** when it needs your input (a column mapping, a sheet selection, or a file password). Select a pending row to resolve it. ### Batch information display Open your dataset's preview panel in the Data Library and expand the **Batches (N)** section to see the complete batch inventory. The Batches view is reachable from several places, not just the Data Library—see [Accessing the Batches View](#accessing-the-batches-view) below for all entry points. #### Displayed information | Field | Description | | --- | --- | | Name | Source filename or custom identifier. Select it to preview the batch | | Date | Exact creation date and time | | Row Count | Records contributed by this batch | | Source | The origin type of the batch data, displayed as an icon indicating whether data was loaded via file upload, database connector, or a Combine Dataset operation | | State | Active, Suspended, or Pending Delete (waiting for approval under a retention policy) | #### Available actions - **Delete**—Permanently delete the selected batches (irreversible) - **Suspend / Unsuspend**—Temporarily exclude without deletion - **Add new data**—A button in the **Batches (N)** section header (file-based datasets only) that opens the Add or Replace data dialog The list shows 10 batches per page. Use the previous and next arrows to move between pages. ![Batches panel with three batches selected and Suspend / Unsuspend and Delete actions with a tooltip](https://mammoth.io/docs/images/20260324_112842_batch_tab_with_actions.webp) ## Batch lifecycle operations ### Suspend Temporarily disable a batch without deletion. Suspended batches are immediately excluded from Views and pipeline execution but can be reactivated with a single click. No data or metadata is lost. **Best for:** Impact testing, data quality quarantine, seasonal exclusions, and rollback preparation before committing to a permanent removal. ### Remove Permanently delete a batch with the **Delete** button. This action is irreversible and requires confirmation. Use Remove only when data is no longer needed for analysis or compliance. **Best for:** Data quality cleanup, outdated data exclusion, and compliance-driven retention policy enforcement. A [retention policy](#batch-retention-policy) can also delete batches for you. | Property | Suspend | Remove | | --- | --- | --- | | Data Preserved | Yes | No | | Metadata | Yes | Yes | | Recovery | Instant (one-click) | Not recoverable via UI. Batches removed by a retention policy are also permanent; their metadata stays in the Activity Log | | Best Use | Temporary exclusion, testing | Permanent exclusion | ## Batch retention policy A retention policy deletes or suspends batches automatically so a dataset doesn't keep growing. Each dataset can have one policy. Whether you can set one up depends on your plan. To create a policy, expand **Batches (N)** in the dataset's preview panel and select **Set up retention policy** below the batch list. The **Retention Policy** dialog offers three rule types: - **Time-based**: Delete or suspend batches older than a number of minutes, hours, days, weeks, or months. The default is to delete batches older than 90 days. - **Count-based**: Keep the latest N batches and delete or suspend the rest. The default is 10. - **Condition-based**: Describe the rows to remove in plain language, then select **Generate** to create a condition shown as SQL. Select **Test config** to see how many rows across how many batches match. This rule permanently deletes matching rows and cannot suspend. ![Retention Policy dialog with Time-based, Count-based, and Condition-based rule types, Run Mode set to Request Approval, a notification recipient, and a Policy Summary](https://mammoth.io/docs/images/20261009_013937_Retention-Policy-modal.webp) Set **Run Mode** to one of: - **Request Approval** (default): The policy flags batches for review, and nothing is deleted or suspended until someone approves. - **Run Automatically**: The policy deletes or suspends matching batches on schedule without approval. When the action is delete, Mammoth asks you to confirm with **Save and run automatically**, because deleted batches can't be recovered. Add at least one recipient to notify. Recipients get an email for approval requests, and you can select **Also notify on every policy run** in approval mode. The **Policy Summary** at the bottom of the dialog restates the rule in a sentence. The policy runs daily. ### Review and approve Once a policy exists, a banner at the top of the Batches section shows its status (Active, Suspended, or the number of batches pending), the rule summary, the last run, and the next run. - **Run Policy** runs the policy now. With approval required, it requests approval; with **Run Automatically**, it executes immediately. - **Approve All**, or **Delete N batches** / **Suspend N batches**, approves the pending batches. Pending rows show a **Delete** or **Suspend** button and the state **Pending Delete**. - **Configure** (the gear icon) opens the policy to edit, disable, or select **Delete Policy**. Deleting the policy leaves the dataset and its existing batches unchanged. In Monitor, **Pending Retentions** lists policies waiting for a decision with **Review and Approve**, and **Active Retentions** shows policies that are currently deleting or suspending. The Activity Log records Data Retention runs. ## Exposing batch information as columns Batch metadata can be surfaced as regular dataset columns, making it available for filtering, grouping, and analysis across all Views. This is particularly useful when working with multi-batch datasets where identifying which batch a row belongs to is critical for analysis. ### Accessing the batches view The Batches view—and the **Add Batch Info to Dataset** action inside it—is reachable from four places: 1. **Data Library—Batches section.** Open the dataset preview panel from the Data Library, select **Batches** from the section navigation. This shows the full batch inventory table (Name, Date, Row Count, Source, State) with Suspend / Unsuspend and Delete actions, plus Add Batch Info to Dataset below the batch list. 2. **Data Editor—Column Manager.** Open the dataset View and launch the Column Manager from the inline action bar at the left edge of the data grid. Click **Add batch info** to open the field-selection panel (this entry point opens the field-selection panel only, not the full batch inventory table). 3. **Data Editor—Pipeline Source card.** At the top of the pipeline panel, the **Source** step shows your originating file or connection. Click the ⓘ info icon at the right of the Source card to open a **Batches** modal with the same inventory table, Suspend / Unsuspend and Delete actions, and Add Batch Info to Dataset link. This icon is disabled until the dataset has been saved. 4. **Data Editor—Manage dataset settings.** In the view tab bar at the bottom of the Data Editor, click the settings control labeled **Manage dataset settings**. This opens the same Dataset Settings page used by the Data Library preview panel—select **Batches** from the left panel to reach the same inventory table and Add Batch Info to Dataset link. ### Selecting metadata fields Regardless of the access point, the same selection panel appears. Choose one or more of the following fields to add as columns: - Batch ID - Date - Source (JSON) - Name - Row Count Fields already added are ticked; clear one to remove its column. Click **Submit** to confirm. All added columns are automatically prefixed with batch_[column name] and applied across all Views of the dataset. Note: Adding batch columns affects all Views of the dataset, not just the current View. ![Data grid showing batch_ID and batch_Name columns, with batch_Name filter listing six batch files](https://mammoth.io/docs/images/20260324_112919_batch_id_name_in_grid.webp) ## Batch management best practices ### Choosing combine vs replace **Use Combine when:** - Building reports requiring historical comparison - Accumulating transactional data over time - Multiple data sources contribute to a unified view - Audit trails and compliance documentation are required **Use Replace when:** - Only the current state matters (inventory, pricing, status) - Dataset size must remain consistent - Previous data becomes obsolete daily or weekly - Real-time dashboards require the latest data only ### Batch naming strategies Use meaningful, consistent filenames before upload. Batch names are derived from filenames and are your primary tool for filtering and identifying data sources later. - `Sales_North_Region_Q2_2024.csv`—descriptive and sortable - `data_export_final_v3.csv`—avoid: no context, no date, ambiguous version Recommended convention: `Location_YYYY_MM_DD.csv`—creates meaningful batch names and enables easy filtering by location or date range. ## Troubleshoot batches ### Column mapping issues on Combine Verify column names for case sensitivity and spacing. Use manual mapping override for non-standard column names and confirm data types match between batches. ### Unexpected row counts Check whether Combine or Replace mode was selected. Review batch-level row counts in the Batches section and look for duplicates across batches. ### Batch not visible in analysis Confirm the batch shows as Active in the Batches section. Check whether the batch was accidentally suspended and verify that transformations re-ran after the batch was added. ### Historical data missing after batch addition Check whether Replace mode was selected accidentally (irreversible). Look for suspended batches in the Batches section, check whether a retention policy removed them, and review the Activity Log for removal actions. ### Batch not showing updated data after Replace Hard-refresh the browser (Ctrl+Shift+R on Windows, Cmd+Shift+R on Mac) and confirm the Replace operation completed successfully in the Activity Log. --- # Batch operations in detail URL: https://mammoth.io/docs/learn/data-sources/batch-operations-detail/ · Updated: 2026-11-02 Advanced guide to Mammoth's batch management system for versioning, historical data, and multi-source consolidation. This document covers advanced batch workflows, multi-batch analysis patterns, automation integration, performance considerations, and troubleshooting. For foundational concepts, including Combine vs Replace, the Batches interface, and exposing batch metadata, refer to [Batch Management](https://mammoth.io/docs/learn/data-sources/batch-management/). ## Batch architecture ### Dataset–batch relationship A **Batch** is a container holding actual source data within a Dataset. One Dataset can contain multiple Batches, each representing a distinct data source or time period. All Batches within a Dataset share the same Schema, and Views show all Batches combined by default. This architecture enables version control, historical analysis, multi-source integration, compliance audit trails, and rollback capability—all within a single unified Dataset. ![Data Library dataset with a Batches panel listing batches with name, date, row count, source, and Active state](https://mammoth.io/docs/images/20260324_114234_multiple_batches.webp) ### View sync after batch changes Auto-sync is a per-link setting. When it is off on a View's incoming link, the View is not rerun when its dataset receives a new batch, and the new data stays pending. A warning triangle (⚠) with the text "Data may be inconsistent" appears in the dataset's Views list, and Monitor's **Needs Attention** tab shows the item as "new batch received, auto-sync off" with **Preview** and **Process** buttons. See [View management](https://mammoth.io/docs/learn/data-sources/view-management/) for the Auto-sync settings, and [Monitor](https://mammoth.io/docs/learn/monitor/) for releasing held data. ## Multi-batch analysis workflows ### Batch-level filtering patterns Once batch metadata has been exposed as columns (see Batch Management—Exposing Batch Information as Columns), use Conditional Filter in the pipeline to isolate or compare data by batch. #### Time period analysis ```plaintext Filter: batch_name CONTAINS "2024_Q1" Result: Shows only Q1 2024 data from combined dataset ``` #### Source comparison ```plaintext Filter: batch_name IN ("Store_001", "Store_002", "Store_003") Result: Analysis limited to specific store locations ``` #### Exclude test data ```plaintext Filter: batch_name NOT LIKE "test%" Result: Removes all batches with names starting with "test" ``` #### Recent data only ```plaintext Filter: batch_date >= DATEADD(month, -3, TODAY()) Result: Last 3 months of batches only ``` ![Data editor with a Conditional Filter on batch_name containing 5708, showing 198 rows and two batch names](https://mammoth.io/docs/images/20260324_114317_batch_name_filter_applied_result.webp) ### Batch tagging strategy Where batch names contain meaningful identifiers (region, period, vendor), create a derived column for cleaner grouping: 1. Expose batch_name column 2. Create a new "Period" or "Region" column using Label & Insert Values 3. Tag batches with business labels such as "Q1", "Q2", or "North" 4. Filter and analyze by business periods 5. Generate period-over-period or region-over-region reports ### Common multi-source workflow patterns #### Store performance comparison Dataset contains one batch per store. Pipeline adds batch_name column, then uses Group & Aggregate by batch to compare performance store by store. Dashboard provides regional drill-down to individual stores. #### Vendor quality scoring Dataset contains vendor-specific batches. Pipeline calculates error rate and completeness score per batch. Low-quality vendor batches are suspended for cleanup and reactivated after remediation. #### Time-series trend analysis Dataset contains monthly batches over multiple years. Window Functions calculate rolling averages and period-over-period changes. Export to BI tools for forecasting and seasonal analysis. #### A/B testing and experimentation Control and treatment batches coexist in one dataset. Suspend control batches to isolate treatment impact, analyze metrics, then reactivate or remove based on results. Activity Log captures the full experiment history. ## Integration with automation Batch operations integrate with Mammoth's Automation system for automated workflows. For full documentation, refer to [Automations](https://mammoth.io/docs/learn/automations/). ### Dataset Refresh For Live Connection data sources, the Dataset Refresh automation pulls the latest data on a defined schedule—daily, weekly, or monthly. Each execution follows the destination dataset's configured mode—**Replace** (deletes the previous batches; only their metadata remains in the Activity Log) or **Combine** (appends as a new batch)—and logs all activity for audit. #### Dataset Refresh setup 1. Go to **Automations** → **Dataset Refresh** 2. Select the Dataset(s) with a Live Connection 3. Configure the schedule (frequency, weekday, start/end date) 4. For multiple datasets, choose **Sequential** or **Parallel** execution mode—Sequential mode also lets you drag to set the execution order ![Automations list with a Dataset Refresh automation open, showing status Active, daily schedule, and next run](https://mammoth.io/docs/images/20260324_114538_dataset_refresh_orchestration_ui.webp) ### Data Consolidation For file-based workflows, the Data Consolidation automation merges new files into an existing dataset as they arrive, following the destination dataset's configured Combine or Replace mode. Each file becomes a distinct batch, named from the filename, with schema validation applied before merging. #### Data Consolidation setup 1. Go to **Automations** → **Data Consolidation** 2. Select a source folder to monitor—this is a folder in your Mammoth Data Library, not an external/cloud folder. Files added to this folder trigger the automation. 3. Select the destination dataset (optionally filter by filename pattern) 4. Review and save > **Note:** Combine vs. Replace mode is not chosen during this setup—it's a per-dataset setting configured separately on the destination dataset's Update Method (see [Batch Management—Combine vs Replace](https://mammoth.io/docs/learn/data-sources/batch-management/)), and can be changed at any time, independently of the automation. #### Automated process - A file is added to the monitored source folder - System validates schema compatibility against the destination dataset - The file is automatically merged into the destination Dataset as a new batch, per the dataset's Combine/Replace setting - Pipeline executes on the updated data - Exports deliver to configured destinations **Example:** A hospitality chain can use Data Consolidation to process daily sales files from each property. Batch names identify individual properties. The pipeline calculates chain-wide KPIs and the revenue dashboard updates automatically. ![Data Consolidation setup with a source folder, products_plant set to Combine, a Name field, and Save changes](https://mammoth.io/docs/images/20260324_114601_dataset_consolidation_combine_mode.webp) ### Activity Log integration All batch operations—whether manual or automated—are captured in the Activity Log with batch-level detail, including operation types such as batch addition, suspension/unsuspension, deletion, and data retention runs. This provides a complete audit trail for compliance and troubleshooting. ## Batch performance and scale ### Individual batch size Up to 50 MB per file upload (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)). ### Best practices for large datasets - Use Replace for latest-only requirements to avoid unnecessary batch accumulation - Set up a [retention policy](https://mammoth.io/docs/learn/data-sources/batch-management/#batch-retention-policy) to delete or suspend old batches by age, count, or condition - Apply Conditional Filter early in pipelines to reduce processing volume - Use Draft mode while building pipelines on large datasets ## Troubleshoot batch operations ### Schema mismatch on combine operations **Problem:** Error message indicating column names do not match when combining files. **Root Causes:** Column names differ between files (case-sensitive), data types are incompatible, or columns are missing in the new batch. **Solutions:** - Verify column names exactly, including case and spacing - Standardize export templates to ensure consistent column structure across sources - Use the Data Consolidation automation with schema validation enabled for automated workflows ### Automation not combining files **Problem:** Data Consolidation automation is configured but files are not combining automatically. **Diagnosis Steps:** 1. Check the Activity Log for automation execution records 2. Verify files were uploaded to the correct Dataset 3. Review schema validation errors for format compatibility issues 4. Test a manual Combine operation with the same files 5. If the file is not of a similar schema, then it will be uploaded as a separate file **Common Fixes:** - Standardize file formats across all sources - Check automation schedule and trigger conditions ### Suspended batch still appearing in analysis **Problem:** Suspended batch data remains visible in the View or pipeline results. **Troubleshooting Steps:** 1. Verify the Batches tab shows the batch as Suspended 2. Close and reopen the Dataset to refresh batch status 3. Clear any cached pipeline results If the batch continues to appear after confirming suspension status, contact support. ## Example batch scenarios ### Financial services: 24-month rolling reports A finance team needed 24 months of transaction history, adding a new month each cycle while maintaining a two-year rolling window. Monthly batch addition in Combine Mode with a count-based [retention policy](https://mammoth.io/docs/learn/data-sources/batch-management/#batch-retention-policy) removing the oldest batches replaced manual consolidation work. ### Manufacturing: Multi-shift quality data Three production shifts daily generate quality control files that must be combined for daily reporting while remaining analyzable at the shift level. Three batches per day with exposed batch names tagged by shift, combined with separate Views for daily and shift-specific analysis, supports quality tracking and shift-level troubleshooting. ### Hospitality: Multi-property revenue A hotel chain uploads daily revenue files that must be consolidated for portfolio analysis while retaining property-level visibility. The Data Consolidation automation creates a batch per property per day, with batch name exposure enabling property identification and pipeline logic calculating portfolio-wide KPIs. --- # Dataset creation options URL: https://mammoth.io/docs/learn/data-sources/dataset-creation-options/ · Updated: 2026-11-02 Compare the dataset creation methods to choose the optimal approach for your data workflow Mammoth offers several ways to create datasets. This guide helps you choose the right method for your situation and move between methods as your needs change. ![Diagram linking six dataset creation methods (Upload, Paste, AI, Connectors, URL, Webhooks) to Create Dataset](https://mammoth.io/docs/images/20260409_081609_Decisiontreediagram.webp) ## Quick method comparison | Feature | File Upload | Paste | Live Connections | AI Generation | From URL | Webhooks | | --- | --- | --- | --- | --- | --- | --- | | **Data Size Limit** | 50 MB per upload | Limited by browser memory | Depends on the source | User-defined (max 500 rows) | Larger files take longer to fetch | Payloads held until processed | | **Recurring Updates** | Manual or automation | Manual only | Dataset Refresh automation | Manual only | Manual only | Source pushes; processed daily or on Refresh | | **Batch Versioning** | Yes | Single snapshot | Yes | Single snapshot | Single snapshot | Combine or Replace | | **Automation Support** | Data Consolidation | None | Dataset Refresh | None | None | Automation on the dataset | | **Authentication** | None | None | Saved connection | None | None (signed URLs supported) | Optional `X-SECRET` header | | **Primary Use Case** | Ad-hoc analysis | Quick exploration | Production workflows | Testing/prototyping | Public datasets | Event-driven pipelines | The best method can change as your use case evolves. If you start with file uploads and later need automation, move to a connector (Live Connection) or a webhook. ## Ways to create datasets ### Upload (files) Drag-and-drop or browse for files from your computer. Best for one-time analysis, ad-hoc exploration, and working with Excel or CSV files you already have. - **Handles:** CSV, Excel (.xlsx, .xls), TSV, XML, and other formats (PDF and images when enabled for your workspace) listed in [Supported formats](https://mammoth.io/docs/learn/data-sources/supported-formats/) - **Size limit:** 50 MB per upload; a folder counts as one upload (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)) - **Best for:** Exploring new data, one-time projects, partner-provided files - **Multiple files:** A folder becomes one dataset. Files you select individually each become their own dataset. ### Paste from clipboard Copy data directly from Excel, Google Sheets, or any spreadsheet—then paste into Mammoth. The fastest way to get started with small datasets. - **Handles:** Tab-separated or comma-separated text, such as cells copied from a spreadsheet - **Practical limit:** Browser memory - **Best for:** Quick tests, small datasets, data entry ### Connectors (Live Connections) Connections to databases, APIs, and business applications. Mammoth pulls data from the source into a dataset, and you can refresh it later. - **Handles:** SQL Server, PostgreSQL, MySQL, Snowflake, BigQuery, Salesforce, and more - **Best for:** Recurring analysis and large datasets Connectors work with the Dataset Refresh automation to pull data from the source on a schedule. If you need your analysis to update automatically from a database or application, use Connectors rather than file uploads. ### Generate with AI Describe the dataset you need in natural language, and AI creates realistic sample data for you. No source data required. - **Generates:** Any data structure you describe - **Size:** User-defined or AI-determined (maximum 500 rows per generation) - **Best for:** Testing pipelines, prototyping dashboards, training scenarios ### From URL Provide a file URL (a public link or a signed URL), and Mammoth will fetch and ingest the file automatically. - **Handles:** `.txt`, `.csv`, `.tsv`, `.psv`, `.xls`, `.xlsx`, `.xml`, `.zip`, `.bz2`, `.gz`, `.tar`, `.7z`, plus `.pdf`, `.tiff`, `.tif`, `.jpeg`, `.jpg`, `.png`, `.heic`, `.heif`, `.webp` when enabled for your workspace - **Best for:** Public datasets, API exports, shared cloud storage ### Webhooks Receive data pushed directly into Mammoth from external systems via a unique webhook URL. Ideal for event-driven pipelines where data is sent to Mammoth automatically as it is generated. - **Handles:** JSON or form data sent in a POST request from external applications, automation tools, or custom event triggers - **Dataset modes:** Replace existing data each time held payloads are processed, or combine them with existing records (new webhooks start in Replace mode) - **Data shape:** Each payload lands as a raw JSON row in a single text column - **Processing:** Received payloads are held and processed into a batch once a day, or immediately when you click Refresh - **Best for:** Event data, third-party app integrations, automated data pipelines ### Sample files Pick one of the sample datasets that come with Mammoth, grouped into Business, Technology, Finance & Real Estate, and Healthcare & Entertainment. No source data required. - **Best for:** Exploring Mammoth, training, and demos ## Choosing the right method With several options available, how do you choose? Start with these questions: ### Decision framework #### Is this one-time or recurring? - One-time analysis → Upload or Paste - Recurring analysis → Connectors - Automated event-driven ingestion → Webhooks #### What is the data size? - Small tables → Paste from Clipboard - Files up to 50 MB → Upload - Larger data → Connectors #### Where is the data now? - Excel file open → Paste from Clipboard - File on disk → Upload - Database or API → Connectors - File URL → From URL - Don't have data yet → Generate with AI or Sample Files - External system pushing events → Webhooks #### Do you need real data? - Testing/prototyping → Generate with AI - Actual analysis → Use the appropriate method for your source ![Diagram linking six dataset creation methods (Upload, Paste, AI, Connectors, URL, Webhooks) to Create Dataset](https://mammoth.io/docs/images/20260409_081609_Decisiontreediagram.webp) ## Common scenarios Use these methods for typical situations: - "I got an Excel file from my colleague" → Use **Upload** (drag file into Mammoth) - "I need to analyze data from our SQL database every week" → Use **Connectors** (create Live Connection, enable Dataset Refresh automation) - "I want to test my pipeline before the real data arrives" → Use **Generate with AI** (describe expected data structure) - "I'm looking at data in Excel right now and want to try one transformation" → Use **Paste from Clipboard** (copy range, paste into Mammoth) - "I found a public dataset on GitHub" → Use **From URL** (paste raw file URL) - "I need to combine 50 CSV files from different regional offices" → Use **Upload folder** (select the folder with all files) - "Our CRM automatically sends a record every time a lead is submitted" → Use **Webhooks** (configure your CRM to POST to your Mammoth Webhook URL, choose Combine with older data to accumulate records) ## Ready to get started? Each method has a dedicated guide with step-by-step setup instructions: - [File Upload](https://mammoth.io/docs/learn/data-sources/file-upload/)—upload files from your computer - [Paste from Clipboard](https://mammoth.io/docs/learn/data-sources/paste-from-clipboard/)—paste cells copied from a spreadsheet - [Connectors (Live Connections)](https://mammoth.io/docs/learn/connectors/)—connect to databases and applications - [Generate with AI](https://mammoth.io/docs/learn/data-sources/generate-with-ai/)—create sample data from a description - [From URL](https://mammoth.io/docs/learn/data-sources/import-from-url/)—fetch a file from a link - [Webhooks](https://mammoth.io/docs/learn/data-sources/webhooks/)—receive data pushed from external systems - [Sample files](https://mammoth.io/docs/learn/data-sources/sample-files/)—start from a built-in sample dataset --- # File upload URL: https://mammoth.io/docs/learn/data-sources/file-upload/ · Updated: 2026-11-02 Upload CSV, Excel, text, XML, archive, PDF, and image files from your computer to create datasets, with automatic schema detection. Upload files from your computer to create datasets in Mammoth. Mammoth detects the structure and column types after you submit. You can upload a single file, several files, or a whole folder. ![New Dataset dialog with Upload selected, a drop area listing supported formats, and Upload file and Upload folder buttons](https://mammoth.io/docs/images/20260408_152338_Dataset_creation_option.webp) ## Supported file formats Mammoth supports the following file types: ### Data files These formats are parsed directly into structured datasets with automatic column and type detection: | Format | Extension | Notes | | --- | --- | --- | | Plain text | `.txt` | Delimiter auto-detected | | Comma-separated values | `.csv` | Most common data format | | Tab-separated values | `.tsv` | Tabs as delimiters | | Pipe-separated values | `.psv` | Pipes as delimiters | | Microsoft Excel | `.xls`, `.xlsx` | Files with multiple sheets show an **Extract sheets** action after upload | | XML | `.xml` | Converted to structured tabular data | ### Compressed files Mammoth automatically extracts compressed files during upload. The extracted contents are processed as if uploaded directly: | Format | Extension | | --- | --- | | ZIP archive | `.zip` | | Bzip2 compressed | `.bz2` | | Gzip compressed | `.gz` | | Tar archive | `.tar` | | 7-Zip archive | `.7z` | ### Documents and images These formats are processed using AI-assisted extraction, converting unstructured content into structured datasets. They appear only when enabled for your workspace: | Format | Extension | | --- | --- | | PDF | `.pdf` | | TIFF image | `.tiff`, `.tif` | | JPEG image | `.jpeg`, `.jpg` | | PNG image | `.png` | | HEIC image | `.heic`, `.heif` | | WebP image | `.webp` | > CSV files are processed fastest and most reliably. When exporting from other systems, choose CSV over Excel when possible for better performance. ## How to upload files ### Upload a single file This is the most common workflow for ad-hoc analysis: 1. Click **+ New Dataset** in your Data Library 2. Select **Upload** (this is the default option) 3. Either drag your file into the upload area OR click **"Upload file"** 4. Click **Submit** The dialog closes right away and the file appears in the Data Library as a pending item. Mammoth then reads the file, scans it for security risks, and creates the dataset. A progress header shows the upload count ("Uploading N items", then "Upload complete"), and you can cancel uploads that are still running. If you select several files individually, each file becomes its own dataset. ![New Dataset dialog with sales_data_messy.csv chosen in the Upload tab and the Submit button enabled](https://mammoth.io/docs/images/20260408_152354_upload_file.webp) ### After upload: what you will see Open the new dataset from the Data Library to see the Dataset Detail Panel. It summarizes what was ingested and lets you configure how future data additions are handled. The panel contains these sections: - **Overview**—Views associated with this dataset, plus a preview of a sample of your data - **Settings**—Controls for Update method, Schema handling, and Cell editing for future batches - **Batches**—Version history of all data uploaded to this dataset - **Automations**—Automations that use this dataset See [Dataset Detail Panel](https://mammoth.io/docs/learn/data-library/dataset-panel/) for details. ### When Mammoth needs your input If Mammoth can't finish creating the dataset on its own, the dataset's panel shows an **Action needed** section. Which action appears depends on the file: - **Define Date Format**—Mammoth can't tell whether dates are US or UK format. See [Upload validation prompts](#upload-validation-prompts). - **Review & Fix**—The file has more than one plausible way to be read. The review dialog shows how Mammoth read the file and has an instruction box where you describe how it should be read. Choose **Looks right** to accept, or **Import as is** to skip the interpretation. On the save step you name the dataset and choose whether to refresh it manually or automatically by watching a folder, then click **Create dataset** or **Create dataset + automation**. - **Extract sheets**—An Excel file has multiple sheets. Pick the sheets or tables to import, optionally tell Mammoth how to read each sheet, and click **Save N datasets**. You can also choose **Import as is**. - **What to import** (PDF)—Choose **All content**, **Only tables**, or a custom instruction describing what to extract. - **Password-protected files**—Mammoth asks for the password before it can read the file. - **Corrupt files**—The panel shows "This file seems to be corrupt" and lets you delete the file. If the virus scan flags a file, it is rejected as a dangerous file and isn't imported. ## Upload a folder When you have multiple related files to upload at once, use the folder upload option instead of selecting files individually. ### Steps to upload a folder 1. Click **+ New Dataset** → **Upload** 2. Click **Upload folder** and select the folder from your system 3. Click **Submit** A folder becomes one dataset, with all its files combined. ### Folder upload requirements - The whole folder must be under 50 MB, because it is uploaded as a single request - Files should share a consistent schema (matching column names and types) - Only supported file types can be added **Best for:** Monthly batch files, multi-location data consolidation, large grouped exports ![New Dataset dialog after Upload folder, listing several date test files from a Dates folder with Submit enabled](https://mammoth.io/docs/images/20260408_152410_Upload_multiple_files_from_folder.webp) ## Advanced upload features ## Upload validation prompts If your file has issues, Mammoth pauses processing and provides specific guidance directly in the Data Library. Common scenarios include: - **Date format ambiguity**—Mammoth cannot determine US (MM/DD/YYYY) or UK (DD/MM/YYYY) format. The **Define Date Format** table in the **Action needed** section lists each affected column with a sample value and a format dropdown. Choose the formats, optionally select **Define date format for this project**, and click **Validate & Apply**. ![Define Date Format panel warning that Mammoth cannot tell US or UK dates, with a US or UK format list](https://mammoth.io/docs/images/20260605_100332_Dateformatambiguity1.webp) - **Column mismatches**—Rows in the new file have fewer or extra columns than the existing dataset schema. Mammoth flags each invalid row with a specific error (e.g. "2 missing columns","3 extra columns") and lets you discard them individually or all at once. - **Delimiter and header row**—If columns appear merged or column names appear as data values, open the Data Preview modal (**See all details**, or **Data settings** in the Settings section of the dataset panel). There you can set the delimiter, the column header row, the number of initial rows to skip, and the date format. ![Data Preview for office_main_unstructured.csv showing 15 invalid rows with 1 missing column errors and Discard all](https://mammoth.io/docs/images/20260408_152428_DataPreviewmodal_with_missing_col_error.webp) ## File size and performance ### Size limits - **Upload size**: 50 MB maximum per upload request, so a folder counts as one upload of 50 MB in total (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)) - **Files per upload**: Up to 1,000 For files larger than 50 MB, use a [connector](https://mammoth.io/docs/learn/connectors/) to your database or storage instead, or split the file. ## When to use file upload **Best for:** - **Ad-hoc analysis** - Quick exploration of vendor files - **Historical data** - Loading archives for trend analysis - **External data** - Partner-provided files, government data - **Initial exploration** - Testing before setting up Live Connections - **Small teams** - Shared files via email or cloud storage **Consider alternatives when:** - **Daily updates** needed - Use Live Connections with Dataset Refresh - **Uploads over 50 MB** - Use a connector - **Real-time requirements** - Use Live Connections - **Complex automation** - Use Data Consolidation or a connector ## Troubleshoot file upload ### Upload fails or times out **Problem**: "Upload failed" error or loading spinner never completes **Solutions**: - Check the upload is under 50 MB in total - If the file is flagged as a dangerous file, it failed the security scan and can't be imported - Verify file format is supported (see format list above) - Try downloading and re-uploading file (may be corrupted) - Check internet connection stability - Contact support if file is known-good format under size limit ### Columns not detected correctly **Problem**: Column headers missing or wrong, data appears in single column **Solutions**: - Ensure first row contains column headers - Check file encoding (save as UTF-8 if special characters) - Verify delimiter is consistent (comma, tab, pipe, etc.) - Look for embedded commas in CSV (should be quoted: "Company, Inc.") ### Wrong data types assigned **Problem**: Numbers show as text, dates as text, text as numbers **Solutions**: - Preview sample data to verify detection - Use **Define Date Format** or the Data Preview modal for date and delimiter problems - You can change data types later using the Convert Column Type task - Common fixes: Account numbers (Number → Text), Dates (Text → Date), ZIP codes (Number → Text) ### Multiple files create multiple datasets **Problem**: You selected several files and got one dataset per file, but you wanted one combined dataset **Solutions**: - Use the "Upload folder" button instead of "Upload file" to combine files into one dataset - Ensure all files have identical column structure - Check that file formats are consistent (all CSV or all Excel) - Verify files aren't corrupted or empty ## File upload best practices ### File preparation - **Standardize templates** for recurring uploads - **Include column headers** in first row - **Use consistent data formats** (dates, numbers, text) - **Remove empty rows** at top or bottom of files - **Save as UTF-8** if file contains special characters ### Naming conventions - **Dataset names**: Descriptive and searchable ("Q4 Sales Reports", not "Data") - **File names**: Include dates or versions for batch tracking - **Column names**: Clear and consistent (`Customer_Name`, not `Cust`) ### Data quality - **Validate before upload** - Check for obvious errors - **Use consistent values** - "Yes/No" vs "Y/N" vs "True/False" - **Handle null values** - Decide on blanks, "NULL", "N/A", etc. - **Preserve data types** - Format numbers and dates consistently > **Tip:** Create a "staging" project for testing file uploads before processing in your main project. This lets you validate structure detection and data quality without affecting production datasets. ## Next steps After uploading your files: 1. **Explore your data** using [Explore Cards](https://mammoth.io/docs/learn/explore-discover/explore-cards-overview/) to understand distributions and quality 2. **Transform if needed** using [Visual Pipelines](https://mammoth.io/docs/learn/transform/) to clean, join, or reshape data 3. **Automate recurring uploads** with [Data Consolidation](https://mammoth.io/docs/learn/automations/data-consolidation/) automation 4. **Create dashboards** with [AI-powered visualization](https://mammoth.io/docs/learn/dashboard/creating-dashboards/) 5. **Export results** to your [preferred format](https://mammoth.io/docs/learn/export-share/export-formats/) or destination --- # Generate with AI URL: https://mammoth.io/docs/learn/data-sources/generate-with-ai/ · Updated: 2026-11-02 Describe a dataset in plain language and Mammoth generates up to 500 rows of realistic test data for pipelines, dashboards, and training. Generate with AI creates a dataset from a plain-language description. Use it when you need test data and do not have a real source yet. Describe the data you need and preview the result in the same window. The **Generate with AI** option appears in the New Dataset dialog only when the feature is enabled for your workspace. ![Generate with AI dialog with a prompt box, Let AI decide or User defined row count options, and a Generate button](https://mammoth.io/docs/images/20260324_111631_AIDatasetGenerationinterface.webp) Use it for testing transformation pipelines, prototyping dashboards, training team members, and creating documentation examples without exposing sensitive data. ## When to use Generate with AI ### Pipeline testing Build and test your transformation logic before real data becomes available. Create sample data that matches your expected schema, then develop your entire pipeline workflow. **Scenario**: Your IT team is still working on database access, but you need to start building monthly sales reports. **Solution**: Generate sales data with the columns you expect, build your pipeline, then swap in real data when ready. ### Dashboard prototyping Create visualization layouts and get stakeholder approval without waiting for data access or dealing with compliance concerns. **Scenario**: Board presentation in 2 weeks, but data warehouse project won't complete for a month. **Solution**: Generate executive metrics data, build the dashboard layout, get approval on design and KPIs. ### Team training Practice using Mammoth's features with realistic data that won't trigger compliance or privacy concerns. **Scenario**: New analysts need to learn the platform but can't access customer data during training. **Solution**: Generate customer transaction data for hands-on practice with all platform features. ### Documentation and demos Create consistent examples for tutorials, user guides, and sales demonstrations. **Scenario**: Building training materials that need to work across different customer scenarios. **Solution**: Generate industry-specific datasets that showcase relevant use cases. ![Diagram with Generate with AI at the center linked to four uses: pipeline testing, dashboards, training, and demos](https://mammoth.io/docs/images/20260324_111122_Usecasediagramshowingfourbranches_.webp) ## How Generate with AI works ### Steps to generate a dataset 1. **Start Creation**: Click **+ New Dataset** → **Generate with AI** 2. **Write Prompt**: Describe your desired dataset in natural language 3. **Set Row Count**: **User defined** is selected by default with 30 rows. Enter an exact number of rows (1 to 500), or choose **Let AI decide** 4. **Generate Dataset**: Click **Generate** and wait for the preview to load. 5. **Review Preview**: Validate the suggested dataset name (you can edit it), column structure, and sample records. The preview is read-only. Select the **X** button in the preview bar to discard it. 6. **Finalize**: Click **Create new dataset** to proceed, or, to adjust the result, click the collapsed prompt to edit it (this discards the preview), then click **Generate** again. The new dataset appears in the Data Library. [Video: Watch on YouTube](https://www.youtube.com/watch?v=VayxSP132zI) ### What happens behind the scenes The AI analyzes your prompt to determine: - **Column names and data types** - **Realistic value distributions** (proper date ranges, sensible price ranges) - **Data relationships** (defects correlate with temperature, sales peak during holidays) - **Industry patterns** (financial quarters, manufacturing shifts, healthcare appointment types) ## Writing effective prompts ### Manufacturing prompt example **Prompt**: ```plaintext Generate production line data with timestamp, line ID, units produced, defects found, operator name, and temperature readings for 8-hour shifts ``` **Generated Result**: - 30 rows - Temperature readings: Average, Minimum, and Maximum values per shift (°C) - Shift Duration: 8 hours per record - Operators: Realistic names rotating across records - Temperature: 20–26°C with natural variation across shifts - Structured production summary at shift level ![Generated production line dataset preview with 7 columns and 30 rows of shift data](https://mammoth.io/docs/images/20260324_111502_Manufacturingprompt.webp) ### Financial services prompt example **Prompt**: ```plaintext Create monthly revenue data by product category and region for 2024, including columns for month, category, region, revenue, and growth rate ``` **Generated Result**: - 120 rows (AI-generated sample size) - Columns: Month, Category, Region, Revenue, Growth Rate - Monthly records for 2024 in YYYY-MM format - Revenue: Realistic numeric values with decimal precision - Growth Rate: Decimal values (e.g., -0.05 to 0.05) showing positive and negative variation - Categories and regions generated dynamically based on prompt context ![Generated 2024 monthly revenue dataset preview with 5 columns and 120 rows](https://mammoth.io/docs/images/20260324_111519_Financialrevenueprompt.webp) ### Healthcare prompt example **Prompt**: ```plaintext Generate patient appointment data including appointment ID, patient demographics, appointment type, provider name, insurance type, and appointment date/time ``` **Generated Result**: - Appointment IDs: Sequential format (APT-2024-0001) - Demographics: Realistic age distribution, gender balance - Types: Physical, Specialist, Lab Work, Follow-up - Providers: Dr. names with appropriate specialties - Insurance: Medicare, Blue Cross, Aetna, Self-Pay - Scheduling: Business hours, realistic appointment intervals ### E-commerce prompt example **Prompt**: ```plaintext Create customer transaction data with order ID, customer name, product, quantity, price, order date, and shipping address for online retail ``` **Generated Result**: - Order IDs: ORD-20240001 format - Customers: Realistic names (no actual people) - Products: Electronics, clothing, home goods with appropriate pricing - Quantities: 1-5 items typical for consumer orders - Prices: $15-$300 with product category correlation - Dates: Recent months with weekend/holiday patterns - Addresses: Realistic US addresses (no real locations) ## Prompt best practices ### Be specific about columns **Vague**: "Generate sales data" **Specific**: "Generate sales data with date, salesperson, product, quantity, unit price, total amount, and customer region" ### Include data types and constraints **Generic**: "Include dates and amounts" **Detailed**: "Include order dates from January-March 2024, dollar amounts between $100-$5000" ### Mention relationships **Independent**: "Add temperature and defect columns" **Correlated**: "Add temperature readings and defect counts, where defects increase when temperature exceeds 80°F" ### Specify business rules **No context**: "Include employee data" **Business logic**: "Include employee data with ID, department, hire date, salary - where IT department salaries are 20% higher" > **Tip:** Start with a broad prompt to get the basic structure, then regenerate with more specific constraints. ## What Generate with AI can and cannot do ### What AI does well **Schema Intelligence**: Determines appropriate column names, data types, and relationships from natural language descriptions. **Realistic Distributions**: Creates sensible value ranges, proper date sequences, and industry-appropriate patterns. **Domain Knowledge**: Understands business contexts like manufacturing shifts, financial quarters, healthcare workflows, and retail seasonality. **Data Relationships**: Generates correlated values (sales peak in December, defects increase with temperature, appointment types match provider specialties). ### Current limitations **Row Count Constraints**: With **User defined**, the maximum is 500 rows per generation (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)), which suits testing, not analysis **Generic Patterns**: Creates realistic but not customer-specific distributions (good for prototypes, not exact replicas) **Static Generation**: No real-time refresh capability (regenerate manually if dataset needs updates) **Schema Approximation**: Matches general patterns but won't perfectly replicate your production schema structure ![Two-column diagram of what Generate with AI does well and its limits, including a 500 row maximum](https://mammoth.io/docs/images/20260324_111208_CapabilitiesvsLimitations.webp) ## Iterative refinement process ### First generation review After initial generation, check: - Do column names match your expectations? - Are data types appropriate (dates as dates, numbers as numbers)? - Do value ranges make business sense? - Are there realistic relationships between columns? ### Refinement strategies **More Specific Constraints**: ```plaintext Original: "Generate customer data" Refined: "Generate customer data with ages 18-75, email addresses, phone numbers, and purchase amounts between $25-$500" ``` **Add Business Logic**: ```plaintext Original: "Include sales rep and revenue" Refined: "Include sales rep and revenue, where senior reps (5+ years experience) have 30% higher average deals" ``` **Include Edge Cases**: ```plaintext Original: "Generate order data" Refined: "Generate order data including some cancelled orders (10%), partial refunds, and missing shipping addresses for pickup orders" ``` ### When to regenerate vs. accept **Regenerate if**: - Column names don't match expected schema - Value ranges seem unrealistic for your industry - Missing important relationships between data points - Need more specific business logic **Accept if**: - Schema structure is close enough for testing - Value ranges are reasonable approximations - Data relationships make basic business sense - Goal is pipeline testing, not data analysis ## Replace generated data with real data ### The replace pattern AI-generated datasets serve as placeholders in a "generate → build → replace" workflow: 1. **Generate** sample data matching expected real data schema 2. **Build** complete transformation pipeline using sample data 3. **Test** all transformation logic and business rules 4. **Validate** output format and dashboard compatibility 5. **Replace** with a connector or file upload when real data is available ![Four-step workflow diagram: generate sample data, build the pipeline, test, then replace with real data](https://mammoth.io/docs/images/20260324_111254_Workflowdiagramshowing.webp) ### Schema consistency tips **Column Names**: Use exact names you expect in production data ```plaintext Good prompt: "Include columns named customer_id, order_date, product_sku, quantity, unit_price" ``` **Data Types**: Be explicit about formats ```plaintext Good prompt: "Use YYYY-MM-DD date format, decimal prices with 2 decimal places, integer quantities" ``` **Relationships**: Mirror expected production relationships ```plaintext Good prompt: "Each customer should have 1-5 orders, each order should have 1-3 line items" ``` ## Troubleshoot Generate with AI ### Generated data doesn't match expectations **Problem**: Column names or data types aren't what you expected **Solution**: Be more explicit in your next prompt about exact column names and data formats ### Values seem unrealistic **Problem**: Prices too high/low, dates in wrong ranges, unrealistic patterns **Solution**: Add specific constraints: "prices between $X-$Y", "dates in 2024 only", "include seasonal patterns" ### Missing relationships **Problem**: Data columns should be related but appear independent **Solution**: Explicitly describe relationships: "higher prices should correlate with luxury categories" ### Need more complex schema **Problem**: Simple generation doesn't match your complex production schema **Solution**: Focus on core columns needed for testing, add complexity gradually through refinement > **Tip:** Use generated data as a starting point, not a final solution. Generate the basic structure first, then enhance it with real data patterns as they become available. ## Next steps Once you have your AI-generated dataset: 1. **Explore the data** using Explore Cards to understand patterns 2. **Build transformation pipelines** to practice your logic 3. **Create prototype dashboards** for stakeholder feedback 4. **Document your workflows** using the sample data as examples 5. **Plan real data integration** to replace sample data when ready ![Five-step next steps diagram from exploring the generated data to planning real data integration](https://mammoth.io/docs/images/20260324_111324_Nextstepsworkflow.webp) --- # Import from URL URL: https://mammoth.io/docs/learn/data-sources/import-from-url/ · Updated: 2026-11-02 Create a dataset from a file at a web or cloud storage URL, including signed S3 URLs and Dropbox links, without downloading and re-uploading it. From URL creates a dataset from a file at a web-accessible address, so you do not have to download and re-upload it. Paste a URL that points to a supported file, and Mammoth fetches it and creates a dataset in your Data Library. ![New Dataset dialog with From URL selected, an Enter file URL field, supported file types, and a Submit button](https://mammoth.io/docs/images/20260408_152613_upload_by_url.webp) It works with direct file URLs and with cloud storage URLs such as S3, Google Cloud Storage, Azure Blob Storage, and Dropbox. No other configuration is needed. ## When to use URL import ### Good fit for - One-time imports from web-accessible file locations - Vendor or partner data files published to a stable URL - Cloud storage files shared via public or signed URLs - Report servers generating downloadable data files ### Use a connector instead when - You need scheduled, automated data refresh from a database - Complex authentication flows are required - Bidirectional communication is necessary ### Use File Upload instead when - Your file is stored locally on your machine - The source does not have a stable or accessible URL ## Supported URL types ### Direct file URLs ```plaintext https://example.com/data/sales_report.csv https://reports.company.com/Q1_2024.xlsx ``` ### Cloud storage URLs #### AWS S3 signed URLs ```plaintext https://bucket-name.s3.amazonaws.com/file.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=EXAMPLE&X-Amz-Date=20240315T120000Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=EXAMPLE_SIGNATURE ``` Note: The above is an example format only. A valid S3 signed URL must include all X-Amz-* parameters to work correctly. The base S3 URL without these parameters will return an Access Denied error. #### Google Cloud Storage ```plaintext https://storage.googleapis.com/bucket-name/monthly-data.csv ``` #### Azure Blob Storage ```plaintext https://storageaccount.blob.core.windows.net/container/file.csv ``` #### Dropbox shared links ```plaintext https://www.dropbox.com/s/abc123/data-export.csv?dl=1 ``` Mammoth automatically sets `dl=1` on Dropbox shared links so that the file is downloaded instead of the preview page. ### URL requirements - URL must start with `http://` or `https://` - The file name must be derivable: Mammoth takes it from the `Content-Disposition` header or the last segment of the URL path. A URL such as `https://example.com/download?id=7` with neither fails - URL must return file content directly, not an HTML page or download landing page - File format must be supported (see list below) - URL must be accessible at the time of import ## Steps to create a dataset from a URL 1. Navigate to your **Data Library** and select the project you want to add data to. 2. Click **+ New Dataset** in the top right corner. 3. In the New Dataset modal, select **From URL** from the left-hand menu. 4. Paste your direct file URL into the **Enter file URL** field. 5. Click **Submit**. Mammoth fetches the file and creates a new dataset in your project. The dialog closes right away and a placeholder row for the new dataset appears in the Data Library while the file is downloaded. Download time depends on the file size. ### Supported file types .txt, .csv, .tsv, .psv, .xls, .xlsx, .xml, .zip, .bz2, .gz, .tar, .7z, .pdf, .tiff, .tif, .jpeg, .jpg, .png, .heic, .heif, .webp > **Note:** The URL must point directly to the file, not to a webpage or landing page containing the file. ## Security ### Prefer HTTPS URLs - Preferred: `https://example.com/data.csv` - Avoid: `http://example.com/data.csv` ### Private cloud storage For private cloud storage, use signed URLs that embed time-limited access credentials directly in the URL string. Mammoth fetches the file using the URL as provided—no separate credential fields are available in the From URL interface. The following S3 signed URL shows the format only. It is not a working URL. ```plaintext https://my-bucket.s3.amazonaws.com/exports/data.csv? X-Amz-Algorithm=AWS4-HMAC-SHA256& X-Amz-Credential=EXAMPLE_CREDENTIAL& X-Amz-Date=20240315T120000Z& X-Amz-Expires=3600& X-Amz-SignedHeaders=host& X-Amz-Signature=EXAMPLE_SIGNATURE ``` ## Example From URL use cases ### Example: vendor data integration **Scenario**: An accounting firm receives transaction files from multiple vendors published to secure portals **Implementation**: - Vendors publish CSV files to a stable, accessible URL - Team imports each file using From URL into the relevant project - Downstream pipelines categorize and validate transactions **Outcome**: No manual file downloads or re-uploads are needed. ### Example: cloud storage file access **Scenario**: An engineering team exports production metrics to S3 and shares them with the data team **Implementation**: - Engineer generates a signed S3 URL after export completes - Data team pastes the signed URL into Mammoth's From URL import - Dataset is created and available for pipeline processing and dashboard visualization **Outcome**: Data team accesses files directly without needing S3 permissions or manual file transfers ## From URL performance considerations ### File size Larger files take longer to download. For very large files, plan for additional wait time before the dataset becomes available. If your source consistently produces very large files, consider asking your data provider to compress files (gzip, zip) or split them into smaller chunks to improve import speed and reliability. ### Network and availability - The URL must be accessible from Mammoth's servers at the time of import - Mammoth waits up to 9 seconds to connect and 27 seconds for the server to respond. If the source server is slower or temporarily unavailable, the import fails - For time-limited signed URLs, ensure the URL has not expired before submitting ## Troubleshoot From URL ### URL not accessible **What you will see**: An error message, and the placeholder row disappears. Failures such as a wrong URL, an expired link, a timeout or a refused connection all produce the same error. **Common causes**: - URL changed or file moved - Signed URL has expired - File temporarily unavailable **Solutions**: 1. Test the URL in a browser to verify it returns the file directly 2. If using a signed URL, generate a fresh one and retry 3. Contact your data provider to verify URL stability ### File format issues **What you will see**: An error message, and the placeholder row disappears. **Common causes**: - No file name in the URL path and no `Content-Disposition` header - Server returns audio or video content - Server returns an HTML page instead of the data file - File extension does not match actual content - Unsupported file format **Solutions**: 1. Verify the URL returns the file directly, not a download or preview page 2. Ensure the file format is in the supported list 3. Test the URL in a browser—if you see a webpage rather than a file download, the URL is not suitable for From URL import ### Access denied **What you will see**: The same error as for an inaccessible URL (the source responds with 401 Unauthorized or 403 Forbidden) **Common causes**: - File is not publicly accessible - Signed URL has expired - URL requires authentication headers that cannot be passed through From URL **Solutions**: 1. Verify the URL is publicly accessible or uses a valid signed URL with embedded credentials 2. Generate a new signed URL if the previous one has expired 3. For files requiring header-based authentication (Bearer tokens, Basic Auth), use the REST API connector instead, as From URL does not support separate authentication headers ### Large file taking a long time **What you will see**: A placeholder row on the Data Library page while the file is being downloaded **This is expected behavior.** Download time depends on file size and source server speed. Wait for the dataset to finish loading. If the import ultimately fails after a long wait, consider using a compressed version of the file or splitting it into smaller parts. ## Comparison with other import methods | Method | Best for | Pros | Cons | | --- | --- | --- | --- | | URL Import | Web-accessible files | No manual download required, works with signed URLs | One-time import, no scheduled refresh | | File Upload | Local files | Simple, immediate, 50 MB limit per file | Manual process | | Connectors (Live Connections) | Database sources | Scheduled automated refresh, always current | Requires database connector setup | | REST API connector | Custom integrations | Supports authentication headers and custom requests | Requires API setup | ## Next steps Once your dataset is created from a URL import: 1. **Explore your data** using Explore Cards to understand structure and quality 2. **Build transformations** in a Pipeline to clean and standardize the imported data 3. **Create dashboards** to visualize key metrics 4. **Set up Automation** if you need recurring data workflows. Scheduled refresh requires a Live Connection, not From URL. --- # Data sources overview URL: https://mammoth.io/docs/learn/data-sources/ · Updated: 2026-11-02 Understand the methods to bring data into Mammoth Analytics and choose the right approach for your workflow. Mammoth has several ways to create a dataset: upload a file, paste from a spreadsheet, connect to a source, generate sample data with AI, import from a URL, load a built-in sample, or receive data through a webhook. All methods produce a dataset you can explore, transform, and visualize. This section is for anyone adding data to Mammoth, from analysts loading a file to administrators setting up recurring feeds. If you are not sure which method to use, start with [Dataset creation options](https://mammoth.io/docs/learn/data-sources/dataset-creation-options/). To load a file from your computer, start with [File upload](https://mammoth.io/docs/learn/data-sources/file-upload/). ![New Dataset dialog with Upload selected, a drop area, and Upload file and Upload folder buttons](https://mammoth.io/docs/images/20260408_152218_Dataset_creation_option.webp) ## Ways to create datasets | Method | Best for | Size limit | Auto-refresh | | --- | --- | --- | --- | | **Upload** | Files from your computer | 50 MB per upload | No | | **Paste from Clipboard** | Quick tests, small datasets | Browser memory | No | | **Connectors** | Recurring, large, or live data | Depends on the source | Yes (Dataset Refresh) | | **Generate with AI** | Testing and prototyping | User-defined (max 500 rows) | No | | **From URL** | File links | None stated; larger files take longer | No | | **Sample Files** | Exploring Mammoth, training, demos | Fixed sample datasets | No | | **Webhooks** | Event-driven external pushes | Payloads held until processed | Push-based; processed daily or on Refresh | ## Upload Drag-and-drop or browse for files from your computer. Best for one-time analysis, ad-hoc exploration, and working with files you already have. - **Handles:** CSV, Excel (.xlsx, .xls), TSV, XML, and other formats (PDF and images when enabled for your workspace) listed in [Supported formats](https://mammoth.io/docs/learn/data-sources/supported-formats/) - **Size limit:** 50 MB per upload; a folder counts as one upload (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)) - **Best for:** Exploring new data, one-time projects, partner-provided files See [File upload](https://mammoth.io/docs/learn/data-sources/file-upload/) and [Supported formats](https://mammoth.io/docs/learn/data-sources/supported-formats/). ## Paste from clipboard Copy data directly from Excel, Google Sheets, or any spreadsheet—then paste into Mammoth. A quick way to get started with small datasets. - **Handles:** Tab-separated or comma-separated text, such as cells copied from a spreadsheet - **Practical limit:** Browser memory - **Best for:** Quick tests, small datasets, ad-hoc requests See [Paste from clipboard](https://mammoth.io/docs/learn/data-sources/paste-from-clipboard/). ## Connectors (Live Connections) Connections to databases, APIs, and business applications. Mammoth pulls data from the source into a dataset, and the Dataset Refresh automation can refresh it on a schedule. - **Best for:** Recurring analysis, large datasets, production workflows See [Connectors](https://mammoth.io/docs/learn/connectors/) for the catalog of supported sources, how to add a connector, and per-connector guides. If a connection fails, see [Connection troubleshooting](https://mammoth.io/docs/learn/troubleshooting/connection-troubleshooting/). ## Generate with AI Describe the dataset you need in natural language, and AI creates realistic sample data for you. No source data is required. - **Generates:** Any data structure you describe - **Size:** User-defined or AI-determined - **Best for:** Testing pipelines, prototyping dashboards, training scenarios See [Generate with AI](https://mammoth.io/docs/learn/data-sources/generate-with-ai/). ## From URL Provide a file URL (a public link or a signed URL), and Mammoth fetches the file and creates a dataset. - **Handles:** `.csv`, `.xlsx`, `.pdf`, `.zip`, and more (see the full list in the guide) - **Best for:** Public datasets, open data portals, shared cloud storage links See [Import from URL](https://mammoth.io/docs/learn/data-sources/import-from-url/). ## Sample files Pick one of the sample datasets that come with Mammoth, grouped into Business, Technology, Finance & Real Estate, and Healthcare & Entertainment. - **Best for:** Exploring Mammoth, training, and demos See [Sample files](https://mammoth.io/docs/learn/data-sources/sample-files/). ## Webhooks Receive data pushed directly into Mammoth from external systems via a unique webhook URL. Use it for event-driven pipelines. - **Handles:** JSON or form data sent in a POST request from external applications or automation tools - **Dataset modes:** Replace existing data each time held payloads are processed, or combine them with existing records (new webhooks start in Replace mode) - **Data shape:** Each payload lands as a raw JSON row in a single text column - **Best for:** Event data, third-party app integrations, automated data pipelines See [Webhooks](https://mammoth.io/docs/learn/data-sources/webhooks/). ## Not sure which to use? See [Dataset creation options](https://mammoth.io/docs/learn/data-sources/dataset-creation-options/) for a comparison, a decision framework, and common scenarios. ## Manage batches and Views After you create a dataset, these guides explain how its data and Views behave: - [Batch management](https://mammoth.io/docs/learn/data-sources/batch-management/): how batches work, Combine and Replace modes, and how to suspend or delete batches. - [Batch operations in detail](https://mammoth.io/docs/learn/data-sources/batch-operations-detail/): filtering by batch, automated batch workflows, scale, and examples. - [View management](https://mammoth.io/docs/learn/data-sources/view-management/): create, name, duplicate, reset, and template Views, and control Auto-sync. ## After dataset creation Whichever method you used, you now have a dataset. Next steps: - **Explore the data.** Mammoth provides Explore Cards, the Metrics Panel, Filter Pills, and a Data Quality Report. See [Explore and discover](https://mammoth.io/docs/learn/explore-discover/). - **Transform the data.** Build pipelines to clean, combine, and prepare your data using transformation functions or AI Prompt. See [Transform data](https://mammoth.io/docs/learn/transform/). - **Share or export.** Export to Excel or CSV, create Live Links, send to destinations, or publish as a Dashboard. See [Export and share](https://mammoth.io/docs/learn/export-share/). - **Automate refresh.** For datasets from Live Connections, set up scheduled refresh with email notifications and activity logging. See [Automations](https://mammoth.io/docs/learn/automations/). --- # Paste from clipboard URL: https://mammoth.io/docs/learn/data-sources/paste-from-clipboard/ · Updated: 2026-11-02 Create a dataset by pasting cells copied from Excel, Google Sheets, or another spreadsheet, and learn what Mammoth detects and where paste falls short. Paste from Clipboard is a quick way to get a small table into Mammoth: copy cells, paste them, and create the dataset. Use it for quick tests and ad-hoc questions that do not need a formal file upload. ## When to use paste from clipboard - Executive asks a question during a meeting → copy Excel data → paste it into Mammoth and explore it - Testing transformation logic with sample data before building full pipelines - Small reference tables (department codes, product categories) for lookup operations - Quick data quality validation before committing to formal uploads ![New Dataset dialog with Paste from Clipboard selected and a Click to paste data area with a Ctrl+V hint](https://mammoth.io/docs/images/20260408_152533_Paste_From_clipboard.webp) ## Paste data to create a dataset To go from a spreadsheet to a Mammoth dataset: 1. **Copy your data**: Select cells in Excel or Google Sheets and copy them (Ctrl+C on Windows, Cmd+C on Mac) 2. **Start new dataset**: Click **"+ New Dataset"** in Mammoth 3. **Choose paste option**: Select **"Paste from Clipboard"** 4. **Paste**: Select **Click to paste data** OR press Ctrl+V/Cmd+V. Mammoth shows an editable preview of the pasted table. To discard the preview, select the **X** button in the preview bar. If you paste again while a preview exists, Mammoth asks "Are you sure you want to replace this preview?" before replacing it. If the browser blocks clipboard access, Mammoth shows "Clipboard access was blocked. Allow access or press Ctrl+V." (Cmd+V on Mac). 5. **Auto-detection**: Mammoth identifies the columns and detects the header row 6. **Name and submit**: Give your dataset a name → click **Create new dataset** Mammoth creates the dataset from the pasted table. [Video: Watch on YouTube](https://www.youtube.com/watch?v=5AOCmI2PVpc) ## What you can paste Mammoth accepts structured data from these sources: ### Spreadsheet applications - **Excel ranges** (with or without headers) - **Google Sheets selections** - Any other spreadsheet application that copies cells as tab-separated text ### Web sources - **HTML tables** from websites (copy table → paste directly) - **Database query results** (copied as text from tools like pgAdmin) - **CSV text** from text editors or command-line tools ### Delimited text - **Tab-delimited** data (most common from Excel) - **Comma-separated** values Mammoth splits the pasted text on tabs if it contains any tab, and on commas otherwise. Other delimiters such as pipes (|) and semicolons are not detected. ![Google Sheets sales_2026 table beside the same rows open in Mammoth as Sales_2026.csv with Explore Cards](https://mammoth.io/docs/images/20260324_105414_Split-screenshowingExcel.webp) Always include the header row in your selection. This improves column naming and type detection. ## Non-tabular content Paste from Clipboard works best with **tabular data**—rows and columns copied from Excel, Google Sheets, or any spreadsheet application. If the pasted content is not in tabular form, Mammoth puts each line in a **single column** as text values. This includes: - Plain sentences—`hello this is not a table` - JSON—`{"key": "value"}` - HTML—`
test
` - Special characters—`@#$%^&*()_+=~` Mammoth rejects pasted file paths, file names (for example `report.xlsx`), and images with the message "Invalid pasted data. Please copy cells from Excel, Google Sheets, or a CSV file." In these cases, review the dataset preview before proceeding. If the result is not what you expected, use a different creation method or restructure your data into rows and columns before pasting. ## Automatic schema detection When you paste data, Mammoth analyzes it as follows: ### Column headers - **Detects a header row** when the first line has a non-numeric label in every column and there is at least one more line - **Leaves the first line as data** when it does not look like a header row ### Data type recognition Mammoth detects column data types when it creates the dataset, in the same way as for a file upload. Review the types after creation and use [Convert Column Type](https://mammoth.io/docs/learn/transform/format-guide/) where needed. ### Delimiter detection Mammoth identifies: - Tab separation (most common from spreadsheets) - Comma separation (CSV format) ![New Dataset dialog showing pasted store data in a preview grid named Clipboard Data with 19 columns and 19 rows](https://mammoth.io/docs/images/20260324_105440_Schemadetectioninterface.webp) ## Example paste from clipboard use cases ### Executive meeting response **Scenario**: CFO asks "What's our average deal size by region?" during board meeting **Workflow**: 1. Open CRM report in another tab 2. Copy relevant data 3. Paste into Mammoth 4. Use Explore Cards to analyze by region 5. Share screen with answer **Result**: The question is answered without leaving the meeting. ### Training and testing **Scenario**: Teaching a team member transformation logic **Workflow**: 1. Create 50-row sample from production data 2. Paste sample into Mammoth 3. Demonstrate pipeline building without affecting production 4. Show before/after transformation results **Result**: Safe training environment with real data structure but limited scope. ### Reference table creation **Scenario**: Need department codes for lookup operations **Data**: 30-row table with Department Name and Department Code columns **Workflow**: 1. Paste reference table 2. Use in Join operations across multiple Views 3. Update by pasting new version when codes change **Result**: A quick lookup table without a formal import. ## Paste from clipboard best practices ### Data preparation - **Include header row**: Select headers with your data for better column naming - **Clean obvious errors**: Fix typos and formatting issues before pasting - **Test with subset first**: Use a few rows to verify detection before pasting the full dataset - **Consistent formatting**: Same date format, number format throughout columns ### Size management - **Start small**: Test with a small range before pasting a large table - **Monitor browser**: Watch for slowdown with large datasets - **Alternative for big data**: Use File Upload for large tables. If the clipboard content is too large, Mammoth shows "Content too large to paste. Use the file upload option instead." ### Data types - **Check numeric codes**: Product IDs might be detected as numbers (want text) - **Verify dates**: Different date formats might parse incorrectly - **Review text columns**: Check long text values in the preview before you create the dataset Paste prepares the dataset in your browser's memory first. For large tables, close other browser tabs to free up memory and prevent slowdowns. ## Paste from clipboard limitations and alternatives ### Size constraints - **Browser memory**: The pasted table is held in your browser until you create the dataset, so very large tables can be slow - **Clipboard size**: Content that is too large for the browser to read shows "Content too large to paste" - **Alternative**: Use [File Upload](https://mammoth.io/docs/learn/data-sources/file-upload/) for large tables ### Version control - **Single snapshot**: Each paste creates a new dataset. To add to it later, use a file with **Add data** or **Replace data** - **Manual refresh**: Must copy-paste again for updated data - **No automation**: Cannot schedule or refresh automatically - **Alternative**: Use a [Connector](https://mammoth.io/docs/learn/connectors/) for data that updates regularly ### Data persistence - **Browser-dependent**: Data exists only in current session - **No autosave**: Must click on Create New Dataset to create permanent dataset - **Lost on refresh**: Browser refresh before Submit loses all data ## Troubleshoot paste from clipboard ### Paste didn't work **Symptoms**: Nothing appears after pasting **Causes**: - Data is plain text paragraph (not structured rows/columns) - Clipboard contains an image, a file path, or a file name - Browser clipboard permissions blocked **Solutions**: - Verify data has clear rows and columns structure - Try pasting into text editor first to see raw format - Enable clipboard permissions in browser settings ### Wrong column types detected **Symptoms**: Numbers detected as text, dates as text, text as numbers **Causes**: - Inconsistent formatting within columns - Missing header row - Special characters in numeric data **Solutions**: - Include header row in selection - Clean data formatting before pasting - Use [Convert Column Type](https://mammoth.io/docs/learn/transform/format-guide/) after upload ### Browser performance issues **Symptoms**: Browser freezes, becomes unresponsive **Causes**: - Dataset too large for browser memory - Multiple browser tabs consuming memory - Complex data with many columns **Solutions**: - Close other browser tabs - Paste smaller subset first - Switch to [File Upload](https://mammoth.io/docs/learn/data-sources/file-upload/) method ### Lost data after browser refresh **Symptoms**: Pasted data disappeared **Causes**: - Browser refresh before clicking on Create new dataset - Browser crash or tab closure **Solutions**: - Always click on Create new dataset immediately after paste - Keep source data available for re-pasting - Save work frequently in source application ## When to use another dataset method ### Use file upload instead when - Dataset is large - Need version control (Replace/Combine batches) - Data will be updated regularly - Working with multiple related files ### Use a connector instead when - Data updates frequently (daily/hourly) - Need real-time analysis - Data lives in database or business application - Want automated refresh scheduling ### Use Generate with AI instead when - Need sample data for testing - Building proof-of-concept workflows - Learning Mammoth features - Creating training scenarios ![Flowchart: large datasets lead to File Upload, frequent updates to Live Connections, sample data to Generate with AI](https://mammoth.io/docs/images/20260324_110135_Decisiontreeflowchart.webp) --- # Sample files URL: https://mammoth.io/docs/learn/data-sources/sample-files/ · Updated: 2026-11-02 Browse and load built-in sample datasets across business, technology, finance, and healthcare to try Mammoth without uploading your own data. Sample files are built-in datasets you can load without uploading your own data. Use them to evaluate Mammoth, train team members, or build demos. ![New Dataset dialog with Sample Files selected and category tabs above cards such as Multi-Store Retail Sales](https://mammoth.io/docs/images/20260324_104502_NewDatasetModalshowingSampleFiles.webp) ## Why use sample files? - **No data preparation**: Start exploring right away. - **Business scenarios**: Each dataset represents a common business problem. - **No sensitive data**: Test features without using company data. - **Shared training data**: Teams can practice on identical datasets. - **Demo preparation**: Build presentations with familiar data patterns. ## Available sample datasets Each sample is a CSV file of 25 to 63 rows, so it loads quickly and is easy to inspect. Samples are grouped into four categories. ### Business | Dataset | Description | | --- | --- | | Multi-Store Retail Sales | 5 clothing stores format standardization | | E-commerce Multi-Channel | Shopify, Amazon, eBay product matching | | Global Franchise Performance | Multi-country restaurant data with currency | | Hotel Occupancy Analytics | Multi-platform booking data consolidation | | Social Media Campaign Performance | Facebook, Instagram, LinkedIn consolidation | ### Technology | Dataset | Description | | --- | --- | | SaaS Business Metrics | Customer acquisition, churn, expansion analysis | | Competitive Intelligence | Competitor pricing and feature analysis | | Manufacturing Quality Control | Production line and IoT sensor metrics | | Supply Chain Optimization | Global vendor performance and delivery | | Media & Entertainment ROI | Cross-platform content performance | ### Finance & Real Estate | Dataset | Description | | --- | --- | | Financial P&L Consolidation | Multi-subsidiary revenue with currency conversion | | Credit Risk Assessment | Multi-bureau loan data risk scoring | | Real Estate Portfolio Analytics | Multi-market property performance and occupancy | | Construction Project Tracking | Multi-site timelines, costs, resources | ### Healthcare & Entertainment | Dataset | Description | | --- | --- | | Patient Outcome Tracking | Clinical data ID standardization and metrics | | Educational Institution Analytics | Student performance, enrollment, resource data | | Non-Profit Fundraising Analytics | Multi-platform donor and campaign data | | Sports Team Performance | Player stats, financials, fan engagement | | Event Management Analytics | Multi-venue ticket sales and attendance | ![Sample Files dialog on the Business tab with Multi-Store Retail Sales selected and Create new dataset enabled](https://mammoth.io/docs/images/20260324_104557_Categoryselectioninterface.webp) ## How to access sample files ### Create a dataset from sample data 1. **Start Dataset Creation** - Click **+ New Dataset** in your Project - Select **Sample Files** from the data source options 2. **Browse by Category** - Choose the **All samples** tab, or one of the Business, Technology, Finance & Real Estate, or Healthcare & Entertainment tabs - Review dataset descriptions - Consider your learning objectives or demo requirements 3. **Select** - Click the card of your chosen dataset. The card is highlighted; there is no data preview - Confirm the description matches your intended use case 4. **Create Dataset** - Click **Create new dataset** to load the sample data - Your new dataset appears in the Project with sample data ready for exploration [Video: Watch on YouTube](https://www.youtube.com/watch?v=2ONAIO0mk70) > **Tip:** Choose sample data that matches your team's domain, for example a manufacturing quality dataset for an operations team. ## Choosing the right sample dataset ### For first-time exploration **Recommended**: Multi-Store Retail Sales - Familiar business concepts (sales, products, regions) - Suits several transformation types - Has patterns for data quality assessment - Fits aggregation and filtering scenarios ### For advanced feature testing **Recommended**: E-commerce Multi-Channel or Supply Chain Optimization - Complex multi-source scenarios - Data standardization challenges - Advanced calculation opportunities ### For team training **Recommended**: Match your industry (Manufacturing → Quality Control, SaaS → Business Metrics) - Domain-relevant scenarios keep exercises practical - Team members recognize the patterns and problems ### For client demonstrations **Recommended**: Industry-specific datasets - Stakeholders recognize familiar data - Use cases map to real business problems ![Before and after of a sample dataset: Remove Duplicate Rows and Bulk Replace steps reduce institution_type to one value](https://mammoth.io/docs/images/20260410_061905_Side-by-sidecomparison.webp) ## Get the most from sample data ### Exploration best practices #### Start with a data quality assessment 1. Use Explore Cards to understand data distributions 2. Check for missing values, outliers, inconsistencies 3. Identify transformation opportunities before building pipelines #### Try several transformation types 1. **Cleaning**: Standardize company names, fix formatting issues 2. **Filtering**: Remove test data, focus on specific regions or time periods 3. **Aggregating**: Calculate totals, averages, growth rates 4. **Joining**: Combine multiple datasets to create richer analysis #### Build example pipelines - Create monthly sales reports (Multi-Store Retail) - Calculate customer lifetime value (SaaS Business Metrics) - Analyze campaign ROI (Social Media Performance) - Track quality improvements (Manufacturing Quality Control) ### Move to your own data When you are ready for real data: 1. **Document Your Learning**: Note which transformations worked well with sample data 2. **Identify Patterns**: Which data quality issues did you encounter and solve? 3. **Plan Your Implementation**: How will your real data differ from the samples? 4. **Start Small**: Begin with a subset of your production data ## Example sample file use cases ### New user onboarding **Timeline**: about 15 minutes **Path**: 1. Select Multi-Store Retail Sales sample (2 minutes) 2. Explore data using Explore Cards (5 minutes) 3. Build simple filter pipeline (5 minutes) 4. Generate first dashboard showing sales by region (3 minutes) **Outcome**: The user has hands-on experience with the platform. ### Consultant client demo **Timeline**: 30 minutes preparation, 15 minutes presentation **Path**: 1. Choose industry-relevant sample dataset 2. Build demo pipeline solving common client problem 3. Create polished dashboard for presentation 4. Use familiar data patterns to explain capabilities **Outcome**: A demo that uses relevant, familiar data. ### Team training standardization **Timeline**: 1 hour training session **Path**: 1. All team members use identical sample dataset 2. Follow structured exercises with predictable outcomes 3. Compare results and discuss best practices 4. Progress to individual exploration with other samples **Outcome**: The team shares a common baseline. > **Tip:** Build your demo pipeline with sample data before the client meeting. You can then repeat the same transformations with their actual data. ## Sample file limitations **What sample files are not**: - Your actual business data (they're learning tools) - Production-ready datasets (they're designed for education) - Comprehensive industry solutions (they're starting points) **What to expect**: - Datasets are smaller than production data (optimized for learning speed) - Some edge cases may not be represented - Data is clean enough to focus on learning Mammoth, not data cleaning **When to move beyond samples**: - You're comfortable with basic transformations - You need to solve specific business problems - You're ready to integrate with your actual systems - You want to build production dashboards ## Next steps After exploring sample files: 1. **Try File Upload**: [Import your own CSV or Excel files](https://mammoth.io/docs/learn/data-sources/file-upload/) 2. **Build your first real pipeline**: Apply learned techniques to your business data 3. **Explore connectors**: [Connect](https://mammoth.io/docs/learn/connectors/) to your databases and business systems 4. **Create dashboards**: Visualize insights from your transformed data 5. **Set up Automation**: Schedule regular data processing workflows ![Five-step path: Sample Files, File Upload, Live Connections, Production Dashboards, then Automated Workflows](https://mammoth.io/docs/images/20260324_104701_Successpathwaydiagram.webp) --- # Supported file formats URL: https://mammoth.io/docs/learn/data-sources/supported-formats/ · Updated: 2026-11-02 Complete guide to all file formats you can upload to Mammoth, including size limits and format-specific best practices. Mammoth automatically detects your file type during upload. Each upload must be **50 MB or smaller** in total, so a folder counts as one upload (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)). ## Format categories ### Spreadsheet formats | Format | Extension | Notes | | --- | --- | --- | | CSV | `.csv` | Most reliable for data exchange | | TSV | `.tsv` | Use when data contains commas | | PSV | `.psv` | Pipe-delimited, alternative to CSV/TSV | | Excel | `.xls`, `.xlsx` | Multiple sheets supported | ### Document formats | Format | Extension | Notes | | --- | --- | --- | | PDF | `.pdf` | Text extraction, table detection | | Plain text | `.txt` | Custom delimiters supported | | XML | `.xml` | Converted to structured tabular data | ### Compressed archives | Format | Extension | | --- | --- | | ZIP | `.zip` | | GZIP | `.gz` | | Bzip2 | `.bz2` | | Tar | `.tar` | | 7-Zip | `.7z` | ### Image formats | Format | Extension | | --- | --- | | JPEG | `.jpeg`, `.jpg` | | PNG | `.png` | | TIFF | `.tiff`, `.tif` | | HEIC | `.heic`, `.heif` | | WebP | `.webp` | --- ## Format-specific notes ### CSV and TSV - Use **UTF-8 encoding** for international or special characters - Include **column headers in the first row** - Use **ISO date format** (YYYY-MM-DD) for reliable date detection - For banking and financial files: remove comma thousand separators—most banking portals do not accept them - If your data contains commas within values, use TSV or wrap values in quotes ### Excel #### What gets imported - All data values - Multiple worksheets (you choose which to import) - Data types per column #### What does not get imported - Charts and embedded images - Macros and VBA code #### Excel tips Use the first row for column headers, avoid merged cells in data areas, and ensure consistent data types within each column. ### PDF - PDF and image files are available when enabled for your workspace, and are processed with AI-assisted extraction - After upload, choose what to import: **All content**, **Only tables**, or a custom instruction - Tables must have a **clear, consistent structure** for reliable extraction - Complex or irregular layouts may require manual review after extraction ### Compressed archives - Mammoth automatically detects the compression format and extracts all contained files - Each extracted file is processed according to its own format - Use compression to upload larger datasets within the 50 MB limit --- ## Choosing the right format - **CSV**—maximum compatibility, banking integrations, simple data structures - **TSV**—when your data contains comma values - **Excel**—multiple related tables, multi-sheet data - **Compression**—datasets approaching the 50 MB limit, multiple files in one upload - **PDF**—reports with tabular data, recurring document processing --- ## Format-specific troubleshooting | Problem | Likely Cause | Solution | | --- | --- | --- | | Data appears in a single column | Wrong delimiter detected | Specify delimiter manually in the Data Preview modal | | Special characters show as symbols | File not UTF-8 encoded | Re-save file with UTF-8 encoding | | Wrong data imported from Excel | Wrong worksheet selected | Choose the correct worksheet during upload | | PDF table data incomplete | Complex or irregular layout | Review extracted data manually and clean as needed | | Dates not recognised | Inconsistent date format | Use ISO format (YYYY-MM-DD) or define date format on upload | --- ## Related guides - [File Upload](https://mammoth.io/docs/learn/data-sources/file-upload/)—step-by-step guide - [Connectors](https://mammoth.io/docs/learn/connectors/)—for files consistently over 50 MB (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)) - [PDF extraction](https://mammoth.io/docs/learn/connectors/pdf-extraction/)—extract tables from PDFs and images --- # View management URL: https://mammoth.io/docs/learn/data-sources/view-management/ · Updated: 2026-11-02 Master Views, Batches, and version control to organize data transformations and collaborate effectively with your team. A **View** is your transformation workspace within a dataset. It starts with the complete combined data from all batches and applies a pipeline of tasks—filters, calculations, joins, reshaping—to produce a transformed output ready for analysis, reporting, or export. Every dataset can have multiple Views. Each View has its own independent pipeline, its own settings, and its own output destinations—while all Views share the same underlying data. Your team can work on the same dataset at the same time without changing each other's pipelines. ![Data Library with a dataset expanded to View 1 and View 2 and an Overview panel showing 2 Views](https://mammoth.io/docs/images/20260409_081844_Datasetoverviewshowingmultipleviews.webp) ## Why use multiple Views in a dataset? The same dataset rarely serves just one audience. A sales dataset might need a detailed analyst pipeline, a KPI summary for the operations team, a formatted feed for a dashboard, and a compliance export for finance—all from the same source, all maintained independently. Without multiple Views, teams either duplicate data into separate files (creating maintenance burden and version drift) or share a single pipeline (creating conflicts and fragility). Multiple Views avoid both problems. Multiple Views enable three things. **Parallel team work.** Two analysts can build completely different pipelines on the same dataset simultaneously. Changes in one View never affect another. **Audience-specific outputs.** Each stakeholder group gets data shaped precisely for their needs—without the underlying dataset being restructured or copied. **Safe iteration.** Duplicate a working View to experiment with new logic. If the experiment fails, delete it. The original is untouched. ![Dataset open in the editor with three View tabs along the bottom and a data grid above](https://mammoth.io/docs/images/20260409_082040_Onedatasetwiththreeviewtabs.webp) ## Common View patterns These are not rigid categories—they are patterns that emerge consistently across implementations. Naming your Views after their purpose (not their number) helps your team immediately understand what each one does. ### Analyst View Full dataset, complete pipeline, granular detail. This is the working View where transformation logic is built, tested, and validated. It typically contains the most tasks and the least filtering—it is built for depth, not presentation. ### Manager / summary View Aggregated to the metrics that matter for operational decisions. Group & Aggregate tasks reduce rows to summary level. KPIs, period-over-period comparisons, and simplified column sets replace the transaction-level detail of the analyst View. ### Dashboard View Pre-shaped for visualization. Columns are renamed to display-ready labels, date ranges are filtered early in the pipeline, and data is structured to match exactly what the chart or dashboard expects. Pipeline execution is kept lean so the dashboard loads fast. ### Export View Schema-matched to a specific destination system. Data types are converted and validated, formatting meets the target system's requirements, and the View is typically connected to automated delivery. What goes out the door is exactly what the destination expects—no manual reformatting. ![Dataset open in the editor with three View tabs along the bottom and a data grid above](https://mammoth.io/docs/images/20260409_082040_Onedatasetwiththreeviewtabs.webp) ## Work with Views ### Create a View Open a dataset from the Data Library. Click the **+** icon in the View tab bar at the bottom of the data editor. The new View opens immediately, starting with the full combined dataset and an empty pipeline. Name the View before building the pipeline. A clear name set at creation prevents the accumulation of "View 3", "New View", "Copy of View 1" that makes datasets hard to navigate for the whole team. ![Data editor with View 1, View 2, and View 3 tabs and a Create new view tooltip on the plus icon](https://mammoth.io/docs/images/20260326_102511_iconintheviewtabbar.webp) ### Name Views View names are the primary navigation tool for your team. Treat them as labels for a shared workspace, not personal shorthand. Recommended pattern: **[Audience or Purpose]—[Destination or Frequency]** ![Dataset with four named View tabs: University USA, Sales, Marketing, and Q1-2025](https://mammoth.io/docs/images/20260326_102527_Fournamedviewtabs.webp) | Good | Why | | --- | --- | | Finance Team—Monthly Close | Clear owner, clear cadence | | Executive Dashboard—Daily | Clear audience, clear delivery | | Salesforce Export—Automated | Clear destination, clear mode | | TEST—New Attribution Logic | Clearly non-production | | Avoid | Why | | --- | --- | | View 2 | No context | | Analysis | Too generic | | Copy of View 1 | Suggests unfinished work | | temp | Temporary Views rarely get deleted | Prefix test and staging Views consistently—**TEST—** or **STAGING—**—so team members immediately know not to rely on them for production outputs. ### Duplicate a View Duplication creates an exact copy of an existing View: same pipeline tasks, same configuration, same settings. The copy is fully independent—changes to it never affect the original. #### When to duplicate - Testing new pipeline logic without touching a production View - Creating a manager-level summary starting from an analyst View - Building a variant formatted for a different destination - Isolating a specific time period by duplicating and changing date filters #### How to duplicate Use the **More options** button on the View tab, or the three-dot menu on the View row in the dataset overview, and select **Duplicate**. The copy appears next to the original View. ![View Settings menu listing Data Update, Rename, Duplicate, Reset, Apply template, Save as a template, Delete, and more](https://mammoth.io/docs/images/20260409_082111_Right-clickcontextmenuonaview.webp) ### Rename and delete Views Rename any View via the three-dot menu → **Rename**. **Delete** a View from the same three-dot menu. Deletion is permanent—the pipeline configuration is lost. Before deleting, confirm no team member or downstream destination relies on the View. For Views that are complete but may be referenced later, rename with an **ARCHIVE—** prefix rather than deleting immediately. Note: Delete is disabled when only one View exists in a dataset. **A dataset must always contain at least one View**. ### Reset a View **Reset** removes everything applied to the View and returns it to a clean state. This includes all pipeline transformation tasks, explore card filters, sorting applied to the data grid, column formats, display changes, and any other elements configured on the View. Use the three-dot menu on the View row in the dataset overview → **Reset**. A confirmation dialog appears before the reset is applied. This action cannot be undone. Use Reset when a View needs to be rebuilt from scratch—for example, when the original pipeline logic is no longer valid after a source schema change, or when repurposing an existing View for a completely different use case. If you only want to remove presentation-layer changes such as column renames and formatting while keeping the pipeline intact, use the **Display Changes** panel at the bottom of the data editor instead. ### Save and apply View templates Templates capture a View's pipeline as a reusable set of transformation rules, without the underlying data. Once saved, a template can be applied to any View to replicate the same pipeline—against the same schema or a different one. **Save as a template.** Open the three-dot menu on the View row and select **Save as a template**. The template is downloaded to your system as a **.mammoth** file. This file contains the full pipeline structure and can be shared, stored, and reused across datasets and projects. **Apply template.** Open the three-dot menu on the View row and select **Apply template**. This option is only active when the View's pipeline is empty—it is disabled if the View already has tasks. Selecting a template loads the saved pipeline rules into the current View. **Schema matching and errors.** Apply template works best when the target dataset has the same column structure as the dataset the template was built on. If the schemas differ, the template still applies, but tasks that reference columns not present in the current dataset will show errors in the pipeline—for example, "This column is missing: Department." Each errored task presents a **Fix** or **Delete** option. You can work through these one by one to resolve mismatches or remove tasks that are not relevant to the new dataset. #### When to use templates - Applying the same transformation logic to multiple datasets from similar source systems - Onboarding a new dataset that follows the same structure as an existing one - Distributing a proven pipeline to other team members or projects as a file ## View Settings and Auto-sync Access View Settings via the three-dot menu on any View row in the dataset overview. ### View Settings options - **Open**—Open the View in the data editor (hidden when you are already in that View) - **Settings**—Open the View's settings in the preview panel - **View activity**—Show the View's activity - **Auto-sync**—Turn the View's own Auto-sync on or off; the menu item shows the current ON or OFF state - **Rename**—Edit the View display name - **Duplicate**—Create an independent copy of the View and its pipeline - **Reset**—Remove all transformations, elements, and filters, returning the View to a clean state - **Apply template**—Apply a saved pipeline template to this View - **Save as a template**—Save this View's pipeline as a reusable template - **Delete**—Permanently remove the View (disabled when only one View exists) The menu can include other items depending on your workspace. **Rename** is disabled when the View's pipeline has an error. ![View Settings menu opened from a View tab with Rename, Duplicate, Reset, template, and Delete options](https://mammoth.io/docs/images/20260326_102611_ViewSettingsdropdown.webp) ### How Auto-sync works **Auto-sync** is a setting on each link between a View and the data it receives or sends. It controls whether data passes along that link automatically. - **Auto-sync ON**: New data passes along the link and the View reruns without action. - **Auto-sync OFF**: Data stops at that link. On a View's incoming link, the View is not rerun when its dataset receives a new batch, and the new batch stays pending until you release it. The Auto-sync controls may not be available in every workspace. #### Auto-sync options To manage every link of a View in one place, open the View in the data editor, select **More Pipeline options** in the pipeline toolbar, then select **Auto-sync options**. The dialog has two tabs: - **Incoming data**: the sources the View receives data from. - **Outgoing data**: the destinations the View sends data to. ![Auto-sync options dialog with the Incoming data tab selected, listing the source dataset with its type, last sync time, and Auto-sync status](https://mammoth.io/docs/images/20261009_013938_Auto-sync-options-modal.webp) Each row shows the source or destination, its type, the last sync, and the Auto-sync state (ON or OFF). Tick rows and select **Enable auto-sync** or **Disable auto-sync**, then select **Apply changes**. You can also turn a single View's Auto-sync on or off from its menu (**Auto-sync**), or tick several Views in the dataset's Views list and use the **Enable auto-sync** and **Disable auto-sync** buttons. ### View status indicators The dataset's Views list has an **Auto-sync** column for each View, and highlights if a View has encountered an error or has pending data. ![Data Library list with a View Settings menu showing Open and Settings items](https://mammoth.io/docs/images/20260326_102631_Datasetoverview.webp) | Indicator | Meaning | | --- | --- | | **ON** | Data updates run automatically for the View. | | **OFF** | New data is held as pending until you release it. | | **Error icon (!)** | The View encountered an error during its latest execution. The icon appears next to the View name. | | **Warning triangle (⚠)** | "Data may be inconsistent. Check Dataflow Monitor to manage Pending data updates." Select it to open the data status dialog. | ### When Auto-sync is off When a View's incoming Auto-sync is OFF and its dataset receives a new batch, the View does not rerun and the batch is held as pending in **Monitor**, on the **Needs Attention** tab. The item reads "new batch received, auto-sync off". To release pending data manually: - **From Monitor**: Monitor → **Needs Attention** tab → select **Process** on the item (use **Preview** to look at the batch first). For a pending update to a destination, the main button is **Update**. - **From the pipeline panel**: Three-dot menu on the Send to Dataset task card → **Run now** Monitor also has a **Paused** tab that lists items paused through Auto-sync controls. Select **Turn Auto-sync ON** there to resume them. #### When to use Auto-sync OFF For Views feeding compliance or executive reports where output should be reviewed before delivery. For Views connected to production systems where an unverified pipeline change should not propagate automatically. For any scenario where a human needs to approve data before it reaches its destination. For full documentation on Auto-sync and pending states, see [Monitor](https://mammoth.io/docs/learn/monitor/). ## View management best practices **Keep each View to one purpose.** A View that serves three audiences with a 40-task pipeline is harder to maintain, harder to explain, and harder to modify safely than three focused Views. When a View becomes difficult to describe in one sentence, it is time to split it. **Name first, build second.** The few seconds spent naming a View at creation saves minutes of confusion per team member per day as the dataset grows. **Never modify a production View to test new logic.** Duplicate it, prefix the copy with TEST, experiment, validate, then either promote the result or discard it. Keeping production Views untouched during iteration helps keep pipelines reliable. **Agree on naming conventions early.** Once a dataset has ten Views with inconsistent names, the cost of reconstruction—figuring out what each View does by reading its pipeline—is significant. Establish the convention before it is needed. **Save templates from proven Views, not works in progress.** A template applied across multiple datasets carries any errors in its pipeline to each new application. Validate the source View thoroughly before saving it as a template. ## Troubleshoot Views ### Destination not updating despite pipeline running Check Auto-sync status in View Settings. If the crossed-out sync icon is visible, Auto-sync is OFF and the pending output is held there. Open [Monitor](https://mammoth.io/docs/learn/monitor/) → **Needs Attention** and select **Process** (or **Update** for a pending destination update) to release, or toggle Auto-sync ON to resume automatic delivery. ### View not reflecting the latest batch data Check the Last Updated timestamp in the dataset overview. If it predates the batch change, the pipeline has not re-run. Open the View and click **Update Data** on the relevant pipeline step to run it manually. If the timestamp is current but data is missing, check the pipeline for Conditional Filter tasks that may be excluding the new batch's rows. For batch-level troubleshooting, see [Batch Management](https://mammoth.io/docs/learn/data-sources/batch-management/). ### Pipeline error after a batch was added or changed The error icon next to the View name indicates the last pipeline run failed. Open the View—the failing task is highlighted in the pipeline panel with error detail. Common causes after a batch change are column name mismatches or data type conflicts between the new batch and what the pipeline expects. For schema consistency guidance, see [Batch Management](https://mammoth.io/docs/learn/data-sources/batch-management/). ### View performance is slow Apply a Conditional Filter as the first pipeline task to reduce data volume before downstream processing. Enable Draft mode before adding multiple tasks to avoid repeated full pipeline executions during development. For detailed pipeline optimization guidance, see [Pipeline Optimization](https://mammoth.io/docs/learn/performance/pipeline-optimization/). ### Team member cannot find a View Views are visible to all project members (Project Admins and Project Editors). If a View appears missing, confirm the team member has the correct project access. Views cannot be made private within a project. ### Apply template option is greyed out Apply template is only enabled when the current View's pipeline is empty—it's disabled as soon as the View has any pipeline tasks. To use it, apply the template to a fresh View, or Reset the current View first if you want to replace its pipeline. (Templates themselves aren't scoped to a project or organization—they're `.mammoth` files saved to your computer via **Save as a template**, so any template file you have access to can be applied.) --- # Webhooks URL: https://mammoth.io/docs/learn/data-sources/webhooks/ · Updated: 2026-11-02 Create a webhook dataset so external systems can push JSON or form data to a Mammoth URL, with Combine or Replace mode and an optional secure header. Webhooks let external systems push data directly into Mammoth. Instead of Mammoth pulling data from a source on a schedule, your external system sends data to a Mammoth-generated URL whenever an event occurs. Payloads that Mammoth receives are held until they are processed into a batch in your dataset, ready for transformation and analysis. This makes Webhooks the right choice when data originates from event-driven systems—applications, forms, payment platforms, or custom APIs—and the source system pushes the data to Mammoth instead of Mammoth pulling it. ## When to use webhooks Use Webhooks when: - An external platform supports outbound webhooks (for example, a payment platform, a CRM, or a custom-built app) - You want the source system to send data to Mammoth without Mammoth pulling it on a schedule - Your source system pushes data on events (new order, form submission, status change) rather than making data available for polling - You are building an automated pipeline where another system sends data to Mammoth as part of a larger workflow Use a Connector instead when you need Mammoth to pull data from a database or API on a recurring schedule. Use File Upload when data arrives as files manually or periodically. ## Create a webhook dataset 1. Click **+ New Dataset** in the Data Library 2. Select **Webhooks** from the left panel 3. Enter a **New dataset name**—use a name that reflects the source system or event type (for example, `Shopify_Orders` or `Form_Submissions`) 4. Select a **Dataset mode**: - **Combine with older data**—each processed set of payloads is appended as a new batch, preserving the full history of all events received. Use this for transaction logs, event streams, form submissions, or any data where history matters. - **Replace the older data**—each processed set of payloads replaces the previous batches entirely. Use this when the external system sends a complete current-state snapshot each time and you only need the latest version. New webhooks default to this mode. 5. Click **Create new dataset** The new dataset appears in the Data Library, ready to receive data. ![New Dataset dialog with Webhooks selected, a New dataset name field, and the Dataset mode set to Combine with older data](https://mammoth.io/docs/images/20260408_152258_webhook.png.webp) ## Find your webhook URL and settings after creation Once the dataset is created, open it from the Data Library. The **Settings** section of the dataset's preview panel shows the following: - **Webhook URL**—the unique address your external system sends data to. Copy this and paste it into your external system's webhook configuration. - **API key**—the unique key of this webhook. It is also the last part of the Webhook URL. - **Secure header**—an optional secret that verifies incoming requests. Set it to **Enabled** and Mammoth shows the secret next to the toggle as `X-SECRET: `. Your external system must then send that value in an `X-SECRET` request header. Mammoth ignores requests whose `X-SECRET` header is missing or does not match. When it is **Disabled**, Mammoth accepts requests to the URL without header validation. New webhooks are created with Secure header **Disabled**. Enable it for production integrations. Configure the Webhook URL (and the `X-SECRET` header, if you enabled Secure header) in your external system's webhook settings before expecting data to arrive. ## How incoming webhook data works Each time your external system sends a POST request to the Webhook URL, Mammoth accepts the payload (JSON, or form fields; query parameters on a GET request also work) and holds it until it is processed. Processing turns all held payloads into one new batch, according to the Dataset mode you configured: - In **Combine** mode, the batch is added alongside all previous batches - In **Replace** mode, the batch replaces the previous batches Held payloads are processed once a day. To process them sooner, click **Refresh** on the dataset in the Data Library. This option appears only while the dataset has payloads waiting to be processed. You can open the dataset at any time to see received batches, check row counts, and verify data is arriving as expected. The dataset has a single text column named JSON, and each payload is stored as one raw JSON row. Parse the JSON into separate columns in a View, then apply further transformations or connect the dataset to an automation pipeline for automated processing. ## Troubleshoot webhook datasets ### No data arriving in the dataset Verify the Webhook URL is correctly configured in your external system, and that the `X-SECRET` header matches if Secure header is Enabled. Check that the external system is actually sending POST requests—most webhook platforms include a delivery log or test button. Confirm the dataset has not been deleted. Payloads are processed into a batch once a day, so click **Refresh** on the dataset to see them sooner. ### Payload received but data looks unexpected Open the dataset and inspect the most recent batch. If the schema does not match what you expected, check whether the external system changed its payload structure. You may need to update your transformation pipeline to handle the new structure. ### Requests ignored when Secure header is Enabled Check that your external system sends the secret shown in the Settings section in an `X-SECRET` request header. If Secure header is Enabled on the dataset, Mammoth ignores requests without the matching secret. You can temporarily disable Secure header for testing, then re-enable it for production. --- # Column browser URL: https://mammoth.io/docs/learn/explore-discover/column-browser/ · Updated: 2026-11-02 Use the Mammoth Column Browser to search, hide, show and explore columns in a View, and the Column Manager to rename, retype, reorder or remove them. The **Column Browser** is a floating panel in the data editor for working with the columns of a View. It lets you search and select columns, hide or show them, and open them as Explore Cards. For deeper changes—renaming, reordering, changing a column's type, removing columns, or adding batch info—it opens the **Column Manager**. ## Open the Column Browser Click the **Column browser** button (the column icon) at the left edge of the data grid, or click the column count in the status bar below the grid ("N columns", or "X of N columns" when some are hidden). Its tooltip reads "Search and select columns to hide, show, explore, rename, reorder or retype." The panel opens as a floating dropdown, with the search box ready for typing. The button is unavailable in a View-only workspace. The Hide columns, Show columns, Show only these and **Column Manager** actions are also unavailable when: - the grid is in edit mode or preview mode—exit it first - the pipeline has a task in error ## Scope: View versus dataset The table shows which changes stay local to your View and which affect the whole dataset. | Change | Where | Scope | | --- | --- | --- | | Hide / Show columns | Column Browser or Column Manager | **View only** | | Open in Explore Columns | Column Browser | **View only** | | Rename, change type, or remove a source column | Column Manager | **You choose**: this View only, or the entire dataset | | Reorder columns, add a column, change columns created by pipeline tasks | Column Manager | **View only** | | Add batch info | Column Manager | **Dataset**: all Views of the dataset are affected | | Copy column names | Column Manager | Copies to your clipboard only | When you save such a change in the Column Manager, a confirmation step asks you to **Apply changes to…** either **This view only** or **Entire dataset**. Changes to the entire dataset modify the dataset schema for all Views, and Mammoth warns you that they may affect other Views, pipelines, and connections that depend on the columns. ## Panel layout The Column Browser has two panels: Left panel—column list. At the top are a select-all checkbox, a **Bulk select** dropdown, and a **Search columns…** box. Each row shows a checkbox, position number, type icon, column name, and an eye button to hide or show that column. Hidden columns are shown dimmed. A pin icon marks frozen columns, and an Explore icon marks columns that already have an Explore Card open. The bottom of the list shows "Showing all N columns", or "Showing X out of N columns" when some are hidden, plus the number selected. Right panel—the **Actions** list (Hide columns, Show columns, Show only these, Open in Explore Columns) and the **Column Manager** button. ## Select columns Check one or more columns in the left panel to enable actions. The footer shows how many columns are selected. Click the dropdown arrow next to the select-all checkbox (**Bulk select**) to quickly select columns by type or visibility. Each option applies to the columns currently listed, so a search narrows it: | Option | What it does | | --- | --- | | **Text**, **Numeric**, **Date** (under **Filter by type**) | Shows only columns of that type and selects them. Choose the same type again to show all columns | | **Visible Columns** | Selects the visible columns | | **Hidden Columns** | Selects the hidden columns | | **Invert selection** | Flips the current selection state | ### Search columns Type in the **Search columns…** box to filter the column list. Matching text is highlighted. If nothing matches, the list shows "No matching columns". ## Hide and show columns These actions are **view-scoped**—they affect only the current View. ### Hide columns Hides the selected columns. Hidden columns disappear from the data grid but remain in the dataset. Available when at least one selected column is currently visible. ### Show columns Makes the selected hidden columns visible again. Available when at least one selected column is currently hidden. ### Show only these Hides every column **except** the ones you have selected. Useful when you want to focus on a specific subset. You can also click the eye button on a column's row to hide or show that column on its own. ## Open Explore Cards from the Column Browser **Open in Explore Columns** opens an [Explore Card](https://mammoth.io/docs/learn/explore-discover/explore-cards-overview/) for each selected column, adding to whatever Explore Cards are already open rather than replacing them—a quick way to bring several specific columns into the Explore panel at once. This action works for any column type. It is unavailable when every selected column already has its Explore Card open. Unlike the hide and show actions, it also works in edit mode and preview mode. ## The Column Manager Click **Column Manager** in the Column Browser to open the Column Manager. Its tooltip explains that you can rename columns, change their type, reorder, hide or remove them in this View or across the whole dataset. The button is unavailable in edit mode, preview mode, when the pipeline is in error, and in View-only workspaces. The Column Manager shows a table of your columns with their position, type icon, name, data type, source, and a **Visible** toggle. Your edits are collected as pending changes. Nothing is saved until you click **Save changes**, and the footer counts them ("N pending changes"). **Discard changes** throws them away. ### What you can do - **Rename a column**—click the name or the edit icon and type a new name. The row shows the old name, an arrow, and the new name, with **Undo rename** to revert. Every column needs a name, and two columns cannot share a name. - **Change a column's type**—use the **Data type** dropdown on the row (Text, Number, or Date). - **Reorder columns**—drag a row by its handle (**Drag to reorder**). - **Hide or show**—use the **Visible** toggle on the row. - **Remove a column**—use the remove button on the row. A removed row is struck through and shows **Removed**, and **Restore column** brings it back before you save. - **Add column**—adds a new column row that you name and type. - **Format names**—rewrites all names in one go as snake_case, camelCase, or Title Case. **Describe** lets you describe the format you need ("Describe the format you need...") and click **Generate** to have AI propose the new names. - **Copy column names**—copies the column names to your clipboard. Rows show a label for each pending change: New, Removed, Renamed, Reordered, or Type changed. ### Work with several columns at once Check several rows and a floating bar shows "N selected" with actions to hide, show, show only these, remove, change type, format the names, or clear the selection. Use the dropdown arrow next to the select-all checkbox (**Select by filter**) to select Text, Numeric, or Date columns, visible or hidden columns, or to invert the selection. ### Save changes When you click **Save changes**, Mammoth asks **Apply changes to…** if you structurally changed a column that comes from the dataset's source data. Reordering, hiding, and showing columns, new columns, and columns created by pipeline tasks apply to this View only without the question. The choices are: - **This view only**—"Affects only" the current View; the dataset and other Views stay unchanged. Renames, reordering, and visibility are applied directly as View display settings. Structural changes (adding, removing, or retyping columns) open the Functions panel with the matching task so you can review it. - **Entire dataset**—"Modifies the dataset schema for all views." Mammoth warns you if other tasks, Views, or metrics still use the columns you are retyping or removing, and lets you confirm or cancel. ## Adding batch information columns The **Add batch info** button in the Column Manager toolbar opens a dropdown titled **Add Batch Info to Dataset** with the note "All views of this Dataset will be affected." Tick the columns you want, then submit. Untick a column that was added earlier to remove it. Columns are prefixed with `batch_[column name]`. Available batch columns: | Column | Type | | --- | --- | | **Batch ID** | Number | | **Date** | Date | | **Source (JSON)** | Text | | **Name** | Text | | **Row Count** | Number | Batch info columns are locked in the Column Manager table. They are managed for the whole dataset, so use **Add batch info** to add or remove them. ## Quick reference: when each Column Browser action is available | Action | Requires selection? | Extra conditions | | --- | --- | --- | | **Hide columns** | Yes—1+ columns | At least one selected column must currently be visible | | **Show columns** | Yes—1+ columns | At least one selected column must currently be hidden | | **Show only these** | Yes—1+ columns |—| | **Open in Explore Columns** | Yes—1+ columns | Unavailable if every selected column's Explore Card is already open | | **Column Manager** | No | Unavailable in edit mode, preview mode, pipeline error, or View-only workspaces | ## Column type icons Each column row shows an icon for its type: Text, Numeric, or Date. The same icons appear in column headers in the data grid. --- # Data Quality Report URL: https://mammoth.io/docs/learn/explore-discover/data-quality-report/ · Updated: 2026-11-02 The Data Quality Report scores a View against six DAMA dimensions, lists critical issues and warnings, and recommends pipeline tasks to fix them. The Data Quality Report evaluates the health of a View's data using the DAMA (Data Management Association) framework. It analyzes every column and gives an overall quality score, critical issues and warnings in plain language, and recommended pipeline tasks. The report doesn't change your data; you build the recommended tasks yourself. ![Data Quality dialog Overview section with a left navigation listing Overview, Critical Issues, Quality Warnings, Recommended Actions and Automation, an 87% quality score, and tiles for Completeness, Validity, Uniqueness, Consistency, Accuracy and Timeliness](https://mammoth.io/docs/images/20261009_195501_DataQualityOverview.webp) The Data Quality Report complements Explore Cards: Explore Cards show patterns in individual columns, and the report diagnoses the whole View. ## When to generate quality reports **Before building a pipeline** Generate a quality report immediately after uploading data to identify show-stopper issues before investing time in transformations. If your data scores "Poor" (below 60%), focus on critical issues first. **Before production** Run a quality assessment before sharing data with stakeholders or feeding into dashboards. A score of "Good" (80%+) typically indicates the data is ready for production use. **Compliance documentation** Generate quality reports for regulatory requirements, audit trails, and data governance documentation. The DAMA framework provides industry-standard quality metrics. **Migration quality assurance** When migrating from legacy systems, track quality score improvement throughout the process. Set acceptance criteria (e.g., minimum 90% score) before go-live. ## Generate a Data Quality Report Prerequisites: the pipeline is not running, and you are not in preview or edit mode. The button is disabled in those cases and in View-only workspaces. The button appears only when Data Quality is enabled for your workspace. 1. Open the View. 2. Click **View Data Quality** in the footer of the View. Once a report exists, the button reads **Data Quality Score** followed by the score level (for example, *Good*). Generating a report opens the summary popover when the analysis finishes. If the analysis fails, Mammoth shows an error message and the button stays as it was. Mammoth analyzes all columns in the View automatically, so you don't select columns. ![Data grid with a Data Quality popup at the bottom showing score 84/100, 1 critical issue and a View Details button](https://mammoth.io/docs/images/20260418_181107_ViewtoolbarshowingDataQuality.webp) ### What happens during analysis Mammoth builds column statistics for the View's data (completeness, uniqueness, minimum and maximum, sample values, and so on). AI then classifies each column by its likely role (identifier, measure, dimension, date, or text) and flags likely problems based on what each column is for. Mammoth checks those flags against the actual statistics and removes any the data doesn't support. While the analysis runs, the button reads "Analyzing Data Quality" with a progress indicator. The report evaluates the View's data after its pipeline, not the Explore Cards filters you have applied. ## Report interface Click the button to see the summary popover, titled **Data Quality** with the score level. It shows the **Score** out of 100, **Column completeness**, the number of **Critical Issues**, and **Recommendations** (as a task count). Click **View Details** to open the full report, with sections in the left navigation. Which sections appear depends on what the analysis finds. A View with no detected issues shows only the Overview: - **Overview**—Overall score and dimension-by-dimension summary (always shown) - **Critical Issues**—High-severity problems requiring immediate attention (shown only when critical issues are found) - **Quality Warnings**—Medium-severity issues worth addressing (shown only when warnings are found) - **Recommended Actions**—Prioritized pipeline tasks to resolve identified issues (shown only when there are recommendations) - **Automation**—Workflow suggestions for systematic remediation (shown only when the analysis has automation suggestions); see [Automation section](#automation-section) ![Data Quality dialog Overview section with a left navigation listing Overview, Critical Issues, Quality Warnings, Recommended Actions and Automation, an 87% quality score, and tiles for Completeness, Validity, Uniqueness, Consistency, Accuracy and Timeliness](https://mammoth.io/docs/images/20261009_195501_DataQualityOverview.webp) ## Overview section The Overview displays your overall quality score and its status, and the six DAMA dimensions as individual score tiles. Score display example from the store_transaction dataset (669,430 rows, 14 columns): ```plaintext Overall Score: 44% — Poor (Critical remediation required) ``` `Completeness: 100% All columns complete`\ `Validity: 28% 10 validity issues`\ `Uniqueness:—1 identifier(s) with duplicates`\ `Consistency: 66% 2 case inconsistencies`\ `Accuracy: 60% 4 columns with outliers`\ `Timeliness: 25% Data is 1678 days old (very stale vs expected 1 day)` Note: A dimension that scores 0% displays as "-" (dash) rather than a number. For Uniqueness this happens when every identifier column has duplicates, or when the View has no identifier columns. The note below the dash explains which. ## The DAMA framework The Data Management Association (DAMA) framework provides six industry-standard quality dimensions. Mammoth scores each dimension from 0 to 100% and combines them into an overall quality score. Dimension scores are based on how many columns have a problem, not on how many rows. ### 1. Completeness—missing data assessment **What it measures:** Null values, missing data, empty fields **Score**: The percentage of columns with no missing values. **Typical issues**: - Required columns (such as keys) that contain empty values - Columns that are entirely empty **Business impact examples:** - Cannot join customer data if Customer_ID has nulls - Revenue calculations fail with missing transaction amounts - Reporting gaps in time series with missing dates ### 2. Uniqueness—duplicate detection **What it measures:** Duplicate values in columns that should be unique **Score**: The percentage of identifier columns (IDs and keys) without duplicates. If the View has no identifier columns, the score is 0% and shows as a dash. **Typical issues**: - Duplicates in an identifier column, flagged when it is less than 95% unique **Real-world example:** ```plaintext Critical: Transaction ID has low uniqueness (4.11% unique) — approx. 641,912 duplicate rows detected Remove duplicate rows by key to ensure reliable joins ``` **Business impact:** Double-counting in metrics, inflated KPIs, analysis errors, unreliable joins ### 3. Timeliness—data freshness **What it measures:** Data age relative to expected refresh frequency **Score**: Compares the age of the newest date in your date columns against the refresh frequency the AI expects for that kind of data (for example, daily for transactions). The score is 100% when the data is within the expected age, 70% when it is up to twice that age, 50% up to four times, and 25% beyond that. A View with no date columns scores 100%. If the AI gives no expected cadence for the date columns, the score is 100% when the data is up to 30 days old, 70% up to 90 days, and 50% beyond that. The report states the measured age and, when there is one, the expected cadence in plain language. **Example**: ```plaintext Timeliness: 25% "Data is 1678 days old (very stale vs expected 1 day)" ``` **Common problems:** - ETL jobs failing silently (data stops updating) - Source systems that stopped sending recent data ### 4. Validity—unexpected values **What it measures:** Values that are unexpected for what the column holds **Score**: The percentage of columns without unexpected negatives, unexpected zeros, or future dates. **Typical issues**: - Negative values in a column that should not be negative (prices, quantities) - Zero values in a column that should not contain zero - Future dates The report does not check text formats such as email or phone patterns. ### 5. Accuracy—outlier detection **What it measures:** Numeric values that fall outside a reasonable range **Score**: The percentage of numeric columns without outliers. Outliers are identified with the interquartile range (IQR) method. This score never drops below 60%, because outliers need domain knowledge to judge. A View with no numeric columns scores 100%. **Example issue output:** ```plaintext Warning: Price has potential outliers (1 detected). Investigate and validate outliers to protect accuracy of price analytics. ``` ### 6. Consistency—casing uniformity **What it measures:** Casing uniformity in text columns **Score**: The percentage of text columns without case variants (for example, "Active", "ACTIVE", and "active"). A View with no text columns scores 100%. The report does not check relationships between columns. **Consistency examples:** ```plaintext Warning: Department has inconsistent casing across values — standardize text case to enable reliable grouping and reporting Warning: Category has inconsistent casing across values — standardize text case to enable reliable segmentation ``` ## Quality scoring system The overall score is a weighted composite across all six dimensions: - Validity: 25% weight - Uniqueness: 25% weight - Completeness: 20% weight - Consistency: 15% weight - Accuracy: 10% weight - Timeliness: 5% weight The overall score is the weighted average, rounded down to a whole number. ### Score tiers with recommended actions **Excellent (95-100%)** - Status: Production-ready - Action: Proceed with confidence - Use cases: Dashboard publishing, stakeholder sharing, automated reporting - Typical issues: Minor formatting inconsistencies only **Good (80-94%)** - Status: Acceptable with awareness - Action: Note limitations, consider minor cleanup - Use cases: Internal analysis, exploratory work, prototype dashboards - Typical issues: Some missing values, formatting inconsistencies, minor duplicates **Fair (60-79%)** - Status: Significant issues requiring attention - Action: Address critical issues before production use - Use cases: Development work only, not recommended for stakeholder sharing - Typical issues: Multiple data quality dimensions affected, some critical issues **Poor (<60%)** - Status: Major problems, extensive cleanup required - Action: Systematic remediation needed - Use cases: Quality assessment only, not suitable for analysis - Typical issues: Multiple critical issues, significant business impact ![Data Quality popup reading Poor, score 44/100, 15 critical issues, 4 recommended tasks and a View Details button](https://mammoth.io/docs/images/20260418_181338_DataQualityScoreindicatorinbottomstatus1.webp) ## Critical issues section The Critical Issues section lists all High Severity problems detected across your dataset. Each issue card includes the issue name, a plain-language description of what was found, the row counts or percentages affected, and the business impact of leaving it unresolved. Example Critical Issues from the store_transaction dataset: ```plaintext Transaction ID low uniqueness — High Severity Transaction ID has low uniqueness (4.11% unique). Remove duplicate rows by key to ensure reliable joins. ``` `Price unexpected negatives—High Severity`\ `Price contains unexpected negative values (1,210 negative). Review and`\ `correct negative prices to ensure valid monetary reporting.` `Price unexpected zeros—High Severity`\ `Price contains unexpected zero values (7,400 zero). Review and correct`\ `zero prices to avoid distorted averages and revenue.` `Subtotal unexpected negatives—High Severity`\ `Subtotal contains unexpected negatives (1,230 negative). Review negative`\ `subtotals to prevent incorrect revenue and margin calculations.` The report first shows as many critical issues as fit in the window. Click **Load more** to see the rest. ![Data Quality dialog Critical Issues section listing three High Severity issue cards: order_date stale data, quantity missing values and sales missing values](https://mammoth.io/docs/images/20261009_195515_DataQualityCritical.webp) ## Quality warnings section Quality Warnings lists Medium severity issues that do not block analysis but can degrade report accuracy or data reliability if left unaddressed. Example Quality Warnings from the store_transaction dataset: ```plaintext Time stale data — Medium Time contains stale entries (1678 days old median). Filter or refresh time values to restore recency for time-based analysis. ``` `Department case inconsistency—Medium`\ `Department has inconsistent casing across values. Standardize text case`\ `to enable reliable grouping and reporting.` `Category case inconsistency—Medium`\ `Category has inconsistent casing across values. Standardize text case`\ `to enable reliable segmentation.` `Price potential outliers—Medium`\ `Price has potential outliers (1 detected). Investigate and validate`\ `outliers to protect accuracy of price analytics.` The report first shows as many warnings as fit in the window. Click **Load more** to see the rest. ![Data Quality dialog Quality Warnings section listing one Medium severity card: city missing values](https://mammoth.io/docs/images/20261009_195541_DataQualityWarnings.webp) ## Recommended actions section The Recommended Actions section translates identified issues into specific pipeline tasks (typically 3 to 5), each with a priority. Each action card describes what the task will do and which issues it addresses. Suggested tasks come from tasks such as Remove Duplicate Rows, Conditional Filter, Text Formatting, Bulk Replace, Find & Replace, Fill Missing Values, Remove Column, and Math Function. Action cards are read-only descriptions. Use them as guidance to build the corresponding pipeline tasks yourself. Example Recommended Actions from the store_transaction dataset: ```plaintext Remove Duplicate Rows — High Priority Remove duplicate rows where Transaction ID repeats (approx. 641,912 duplicate rows) and keep one canonical record per transaction to ensure reliable joins. ``` `Conditional Filter—High Priority`\ `Filter rows with negative monetary amounts (Price 1,210; Subtotal 1,230;`\ `Tax 1,230; Total 1,470) and investigate before inclusion to prevent`\ `incorrect financial aggregates.` `Math Function—High Priority`\ `Recompute Total = Subtotal + Tax - Discount and flag mismatches`\ `(33,471 subtotal/tax/total outliers) to correct calculation errors for`\ `accurate reporting.` `Text Formatting—Medium Priority`\ `Apply text formatting to Department and Category to normalize casing`\ `across values so grouping and segmentation work reliably.` ## Automation section The Automation section appears in the left navigation (for example, "Automation (2)") only when the report includes workflow suggestions, which are generated only when high-severity issues exist. Each suggestion groups related remediation steps into a single named workflow, shown as a card with a title and description. Note: each automation card is guidance only—there is currently no **Configure** button to act on it directly from the card. Use the description as guidance to manually build the corresponding pipeline tasks. Example Automation suggestion from the store_transaction dataset: ```plaintext Monetary Validation & Repair Automate filtering of negative/zero monetary rows, recalculate totals with Math, and flag mismatches for review to ensure accurate financial reporting. ``` ## Refresh behavior The Data Quality Report is generated when you click the button. When the View's data changes, the saved report is cleared and the button returns to **View Data Quality**. Click it to generate a new report. When to regenerate: - After applying pipeline changes to measure improvement - When new data batches are added to the Dataset - Before final production deployment - For compliance documentation at project milestones A report is saved with the View and reflects a snapshot at generation time. A new report replaces the previous one. ## Recommended workflow **Stage 1—Initial assessment** Generate the report immediately after data upload. Understand baseline quality before any transformations. Identify show-stopper issues early. **Stage 2—Mid-pipeline validation** Regenerate after major transformations. Validate improvements. Identify remaining issues. **Stage 3—Pre-production quality gate** Final report before sharing with stakeholders. Verify data meets business quality standards. Required for regulated industries. ## Real-world use cases ### Pre-production data validation Scenario: data engineer preparing monthly sales report for executives Workflow: 1. Load transformed sales data into Mammoth View 2. Generate Data Quality Report 3. Result: Score 72% (Fair) with critical issues—duplicate orders, negative price values, missing sales rep data 4. Remediation: Build pipeline tasks based on Recommended Actions guidance 5. Validation: Regenerate report to confirm score improvement 6. Outcome: Published dashboard with confidence, avoided an embarrassing executive meeting ### Regulatory compliance documentation Scenario: compliance officer validating quarterly financial reporting data for SOX audit Workflow: 1. Import quarterly financial data from multiple systems 2. Generate Quality Report for audit documentation 3. Assessment: Score 84% (Good)—Completeness 92%, Accuracy 89%, Consistency 78% 4. Documentation: The report's score and dimension breakdown serve as DAMA quality evidence 5. Remediation: Address consistency issues for clean audit trail 6. Outcome: Audit documentation complete ### Data migration quality assurance Scenario: operations team migrating customer data from legacy CRM Workflow: 1. Baseline: Import legacy data—Quality Report shows 43% (Poor) 2. Phase 1: Address critical issues via pipeline transformations—Score improves to 68% (Fair) 3. Phase 2: Address warnings and consistency—Score improves to 87% (Good) 4. Acceptance Testing: Final validation achieves 92% (Excellent) 5. Go-Live: Migration approved based on documented quality improvement Result: quality score improved from 43% to 92%, with a remediation audit trail. ## Data Quality Report versus View Insights ### Data Quality Report - Purpose: Data health diagnosis - Focus: Technical data issues and compliance - Output: Structured problem list with severity levels - Action: Prioritized remediation guidance - Audience: Data engineers, QA teams, compliance officers - When to use: Pre-production validation, compliance docs, troubleshooting ### View Insights (AI-generated) - Purpose: Business intelligence discovery - Focus: Patterns, trends, interesting observations - Output: Natural language business insights - Action: Informational—guides analysis direction - Audience: Business stakeholders, analysts, decision makers - When to use: Business discovery, stakeholder communication, trend identification Run the Quality Report first to ensure data health, then generate Key Insights for business discovery on validated data. ## Advanced quality assessment ### Filtering impact on quality analysis Quality Reports analyze the View's data after its pipeline. Filters you apply in Explore Cards do not change the report. To assess a subset, add a Conditional Filter task to the pipeline, then generate the report again. ### Regeneration strategy When to regenerate: - After applying multiple pipeline fixes to track improvement - When new data batches are added - Before final production deployment - For compliance documentation at project milestones Best practice: regenerate after every 3-4 pipeline tasks applied to track progress and avoid over-fixing. ## Performance and limitations ### Current limitations - Real-time: snapshot analysis only, not continuous monitoring - Cross-dataset: single View analysis only, cannot compare quality across datasets - Recommended Actions: the cards describe tasks but do not create them. Build the tasks in the pipeline - Automation: the Automation section shows workflow suggestions as read-only cards—you cannot act on a suggestion directly from the card ## Troubleshooting quality reports ### Report generation fails Problem: the report does not generate or an error message appears Solutions: - Verify View contains data (not empty) - Wait for any running pipeline to finish, then try again - Try refreshing the page and regenerating ### Unexpected quality scores Problem: score seems too low or too high for the data condition Solutions: - Review individual issue details rather than just the overall score - Check the dimension scores. They count affected columns, so a View with few columns can swing sharply - Check whether the dimension weights match your priorities - Consider business context—some flagged issues may be acceptable for your use case ### A dimension shows a dash (-) What it means: the dimension scored 0%. For Uniqueness, this means every identifier column has duplicates, or the View has no identifier columns, as the note under the dash says. Action: review the Critical Issues section for details on which columns are affected and the extent of duplication. ## Next steps After generating your Data Quality Report: If the score is Excellent (95%+): - Proceed with dashboard creation or stakeholder sharing - Document quality score for audit/compliance records - Set up an Automation to refresh data on a schedule If the score is Fair to Good (60-94%): - Prioritize critical issues using guidance from Recommended Actions - Manually build pipeline tasks corresponding to each recommended action - Regenerate report to measure improvement - Consider acceptable quality threshold for your specific use case If the score is Poor (<60%): - Focus on critical issues first - Use Recommended Actions as your guide for fixes - Do not proceed to analysis until quality improves - Consider addressing data quality at the source system level --- # Date column cards URL: https://mammoth.io/docs/learn/explore-discover/explore-cards-date/ · Updated: 2026-11-02 Date Explore Cards chart a date column by day, month or year, with Earliest and Latest values, so you can spot seasonality, gaps and future dates. Date column cards are Explore Cards that show temporal patterns as a bar chart, a timeline, or a list. Seasonality, missing periods, growth trends, and operational rhythms become visible without writing date functions or building pivot tables. ![Date Explore Card for order_date with a column chart by month, the chart type and Count menus, and Earliest and Latest values below](https://mammoth.io/docs/images/20261009_194431_DateExploreCard.webp) Mammoth automatically selects the time granularity from the earliest and latest values in the column: if they fall in different calendar years the card groups by Year, if they fall in different months of the same year it groups by Month, and otherwise it groups by Day. Automatic selection only ever chooses Day, Month, or Year—for genuinely intraday patterns, switch to Hour, Minute, or Second manually using the aggregation menu described in [Show values by and granularity](#show-values-by-and-granularity). ## What date Explore Cards show ### Vertical bar chart layout Date columns display as **vertical bar charts** where each bar represents a time period and its height shows how many records fall within that period. - **Bars extend upward**, height proportional to frequency - **Period labels** sit on the X axis below each bar (e.g., "Jan-2024", "Feb-2024" at Month granularity) - **Hover any bar** to see a tooltip showing the exact period and its value - **Chronological order**—oldest period on the left, newest on the right - **Summary statistics** below the chart: Earliest and Latest datetime values ![order_date card with the January 2026 bar hovered and a tooltip reading Count: 10, 83.3%, with the hint Click to select, drag across for a range](https://mammoth.io/docs/images/20261009_194456_DateCardBarTooltip.webp) ### Earliest and latest statistics Below the chart, two statistics are displayed: - **Earliest**—the oldest datetime value in the column, shown with full date and time (e.g., `2024-01-02 12:00:00`) - **Latest**—the most recent datetime value, also shown with full date and time (e.g., `2024-12-23 12:00:00`) These immediately flag data range issues—future dates in historical data or a Latest value far older than expected both stand out here. ![Date card statistics showing Earliest 2024-01-02 12:00:00 and Latest 2024-12-23 12:00:00](https://mammoth.io/docs/images/20260421_160719_Statisticspanel1.webp) ### Columns, timeline, and list views Date Explore Cards have three views, which you switch with the chart type dropdown in the card header: - **Columns**—the default vertical bar chart, best for seeing trends and seasonality - **Timeline**—the same periods drawn as a line over time - **List**—shows the periods as a list, useful for reading exact counts per period ## Card controls Date Explore Cards have these controls: the aggregation menu in the card header (it reads **Count** by default), the chart type dropdown, the **More options** menu (⋮), and, in list view, **Search values** and **Sort by** above the list. ### Show values by and granularity Clicking the aggregation menu opens a panel with two settings applied together: Show values by—controls what the card measures for each time period. By default it shows COUNT (number of rows), but you can switch to the aggregation of any numeric column—for example Sum of revenue per month or Average order value per day. Supported functions: | Function | What it shows | | --- | --- | | **COUNT** | Number of rows per time period (default) | | **SUM** | Total of the selected numeric column per time period | | **AVG** | Average of the selected numeric column per time period | | **MIN** | Smallest value of the selected numeric column per time period | | **MAX** | Largest value of the selected numeric column per time period | | **STDDEV** | Standard deviation of the selected numeric column per time period | | **DISTINCT_COUNT** | Number of distinct values of the selected column per time period | Granularity—controls the time period used for grouping. Available options: | Granularity | Example labels | Best for | | --- | --- | --- | | **Day** | 01-Aug-2024, 02-Aug-2024 | Daily operations, short-term trends | | **Month** | Jan '24, Feb '24 (list) or Jan-2024 (chart) | Seasonal patterns, monthly performance | | **Year** | 2022, 2023, 2024 | Long-term trends, year-over-year analysis | | **Hour** | 01-Aug-2024 08:00, 01-Aug-2024 09:00 | Intraday patterns, shift analysis | | **Minute** | 01-Aug-2024 08:15, 01-Aug-2024 08:30 | Process timing, high-frequency data | | **Second** | 01-Aug-2024 08:15:00, 01-Aug-2024 08:15:01 | Real-time monitoring, precise event logging | Mammoth automatically selects a granularity when the card first loads—but automatic selection only ever chooses **Day**, **Month**, or **Year**. If you need **Hour**, **Minute**, or **Second** (for intraday analysis), you must set it manually here—it is never chosen automatically, even for data that spans only a few hours. Once you've set both options, click **Apply** to update the card or **Cancel** to discard changes. ![order_date card Count menu open, with Show values by COUNT, a Granularity dropdown set to Month, and Cancel and Apply buttons](https://mammoth.io/docs/images/20261009_194549_DateCardCountMenu.webp) ### More options menu (⋮) The **More options** button opens a menu. The options available depend on whether a value is currently selected: When no value is selected: - Copy values to clipboard - Export list as CSV - Export Image as PNG (chart and timeline views only) When a value is selected (and you can edit the workspace): - **Replace all values like this**—opens Label & Insert Values with the selection filled in as the condition - **Remove all values like this**—opens Conditional Filter set to remove records in that period - **Keep all values like this**—opens Conditional Filter set to keep only records in that period - Copy values to clipboard - Export list as CSV - Export Image as PNG (chart and timeline views only) ![Animation of a date card in a View with the cursor on its More options menu icon](https://mammoth.io/docs/images/20260422_185625_Twoside-by-sideMoreoptionsmenus.webp) ### Search values Available above the list in list view—lets you search for a specific time period within the card. Most useful when the date range spans many periods and scrolling isn't practical. ### Sort The **Sort by** menu is available above the list in list view only. Choose what to sort by, then **Ascending** or **Descending**, and click **Apply**: - The card's measure (Sum, Count, etc.) - The period value—chronological order ![order_date card in list view with the Sort by menu open, showing a Count dropdown, a Descending dropdown, and Cancel and Apply buttons](https://mammoth.io/docs/images/20261009_194627_DateCardListSort.webp) ## Temporal patterns you'll see **Seasonality:** Recurring cycles become immediately obvious. Retail data shows holiday spikes, subscription services show new-year bumps, B2B data shows summer slowdowns. **Trends:** Gradual change appears as a rising or falling pattern across periods. Ascending bars indicate growth; descending bars indicate decline. **Operational rhythms:** Business cycles emerge clearly—weekday vs weekend activity, month-end processing spikes, shift-based patterns in manufacturing. ## Data quality issues detected **Missing time periods:** Gaps in otherwise continuous data show as absent bars in the timeline. If daily production logs should appear every day but specific dates are empty, you've found a data collection issue. **Future date errors:** Immediately visible in the Latest statistic—if it shows a date beyond today in a historical dataset, future dates exist in your data. **Batch processing artifacts:** Data that should be continuous but shows heavy clustering on specific dates—such as 90% of records on the last day of each month—reveals system processing patterns that may affect analysis. ## Real-world examples ### Retail seasonality planning A retail analyst opens an annual orders dataset. The Date Explore Card immediately shows a monthly pattern: - Baseline months (Jan–Oct): 500–700 orders each - Holiday spike (Nov): 2,400 orders - Peak month (Dec): 3,100 orders - Post-holiday drop (Jan): 400 orders Filtering to November and cross-referencing the product category card reveals that "Gifts" dominates—enabling data-driven inventory planning for the following year. ### Operations data completeness A production manager expecting daily logs opens the production_date column. The date card reveals three dates in August with no bars. Cross-referencing with maintenance records confirms two were planned downtime; one was an undetected data collection failure—caught before it affected any downstream reports. ### Intraday traffic patterns A marketing analyst reviewing a week of website visit data switches granularity to Hour, revealing: - Peak traffic: 12:00–14:00 and 20:00–22:00 - Low activity: 02:00–06:00 Promotional campaigns are rescheduled to align with these peaks. ## Troubleshooting **Date column appears as text, not a chart** - Check that date values are consistently formatted in the source data - Use the Convert Column Type function to correct date parsing - Inconsistent formats within the same column (e.g., mixing MM/DD/YYYY and DD-MM-YYYY) will prevent correct detection **Automatic granularity isn't right for your analysis** - Use the aggregation menu to override—select your preferred granularity and click Apply - This does not affect the underlying data **Chart jumps to a coarser granularity than expected** - Automatic granularity depends on the range of the dates currently counted, so it can change when a filter is applied - Use the aggregation menu to set your preferred granularity and click Apply **Expected seasonal patterns not visible** - Ensure the date range covers at least one full cycle (a full year is needed to see annual seasonality) - Try a different granularity—a monthly view can obscure weekly patterns - Check the Earliest and Latest stats to confirm the date range covers the period you expect **Earliest or Latest value looks wrong** - Note that these show the full datetime including time component—a date that looks correct may have an unexpected time value - Check for future dates in historical data, or dates predating when the business or system existed --- # Explore Cards—interactions URL: https://mammoth.io/docs/learn/explore-discover/explore-cards-interactions/ · Updated: 2026-11-02 How to select, filter and exclude values in Explore Cards, read the filter badge, and convert explore filters into a new View or a Conditional Filter task. Explore Cards respond to your clicks in two ways: a single click selects values for careful investigation, and a double-click filters right away. Progressive discovery means filtering one card to reveal patterns in the cards that follow it. **Key interaction types**: - **Click**: Select values (no filtering yet) - **Double-click**: Filter to a value right away - **Filter and Exclude**: Apply or invert a selection - **Filter badge**: See and manage active explore filters - **Filter-to-pipeline**: Convert explore filters into a pipeline task or a new View ![Explore panel above the data grid with three cards: city (text), quantity (numeric) and order_date (date), and the Add card button at the left](https://mammoth.io/docs/images/20261009_193601_ExploreCardsPanel.webp) ## Click: select values Clicking a value in an Explore Card **selects it without filtering your data**. You can select several values, then decide what to do with them. ### What happens on click 1. **The value is marked as selected** in the card (a checkbox in list views, a highlighted bar in chart views) 2. **A selection bar appears** showing how many values and rows are selected, with **Filter**, **Exclude**, and **Clear selection** buttons 3. **The data grid remains unchanged** (no filtering applied) ### Selecting more than one value - **Click** more values to add them. A plain click toggles a value on or off. - **Shift-click** to select a run of values from the last one you clicked. - **Drag across** bars in a chart view to select a range. - In list views, **Select all** and **Invert** select every value or flip the selection. Select values, then choose what to do with them: - **Filter** (or press Enter)—show only rows with the selected values - **Exclude**—hide rows with the selected values - **Clear selection** (the × button, or press Esc)—deselect everything You need edit access to the workspace to filter. Viewers can still read the cards. ### Actions in the More options menu The card's **More options** (⋮) menu offers shortcuts. With values selected, and when you can edit the View, it offers transformation shortcuts that open the matching function in the Functions panel with your selection filled in, so you can review it before applying: **For text columns**: - **Replace all values like this** (opens Bulk Replace) - **Remove all values like this** (opens Conditional Filter set to remove) - **Keep all values like this** (opens Conditional Filter set to keep) **For numeric and date columns**: - **Replace all values like this** (opens Label & Insert Values) - **Remove all values like this** (opens Conditional Filter set to remove) - **Keep all values like this** (opens Conditional Filter set to keep) **For all columns**: - **Add to dashboard…** (when you can create or edit dashboards in the project) - **Copy values to clipboard**—copies the selected values with their counts, or every value if none is selected, as tab-separated text. Ctrl+C does the same when values are selected - **Export list as CSV** - **Export Image as PNG** (chart views only) ### When to use click **Data quality investigation**:\ Select suspicious values to open Bulk Replace without filtering the data first. **Transformation planning**:\ Select values and check the row count in the selection bar before deciding whether to filter. ## Double-click: instant filtering Double-clicking a value **immediately filters your data** and updates the cards that follow it. Use it for rapid data investigation. ### What happens on double-click 1. **The filter is applied** with no confirmation step 2. **The card shows a Filtered chip** (or Excluding, if you used Exclude), and the filter badge beside the Explore toggle updates 3. **The data grid updates** to show only matching records 4. **The cards to the right recalculate** based on the filtered data In chart views, double-clicking a bar also drills into it. A **Drill path** appears so you can step back to **All**. ### Progressive discovery in action This example shows progressive discovery in practice. **Example: Manufacturing quality investigation** **Step 1**: Double-click "Fabrication Line Beta" in the line_name Explore Card - The line_name card shows a Filtered chip - The data grid shows only Beta line records (2,847 rows → 892 rows) **Step 2**: Observe how other cards update: - **shift Explore Card** now shows: Day (60%), Evening (25%), Night (15%)\ *Discovery: Beta line runs more day shifts* - **defect_severity Explore Card** shows: Critical (35%), Major (45%), Minor (20%)\ *Discovery: Beta line has unusually high critical defect rate* - **date Explore Card** shows: Spike during weeks of March 15-22\ *Discovery: Beta line issues concentrated in specific period* **Step 3**: Add a second filter—double-click "Critical" in defect_severity - Now filtering on both line_name and defect_severity - Cards update again showing patterns within BOTH filters - **operator_name Explore Card** reveals: 3 operators account for 80% of critical defects **Insight discovered**: Specific operators on specific line need training—all discovered through clicks. > This is progressive discovery: each filter reveals deeper patterns in your remaining data. ## Managing explore filters The filter badge beside the **Explore** toggle shows how many explore filters are on, counting Search, Ask, and Compare cards too. It is visible whether or not the panel is open. The × beside it clears all explore filters in one click. ### Reading the filters Click the badge to open the list of filters. Each row shows the column and what it is filtered or excluded to, in plain words, such as `region` and `West`. ### Filter logic Several cards = AND logic: all conditions must be true - Filtering `region` to West **and** `product_type` to Electronics **and** `status` to Active shows only records matching ALL criteria Several values in one card = OR logic: any selected value matches - Selecting "Active" and "Pending" in status and clicking **Filter** shows records with EITHER status value ### Order matters Cards filter the cards to their right. When you change or clear a filter on a card, filters on the cards after it are cleared, because those cards were showing values from the earlier selection. A card with a filter moves toward the front of the row. If a card is showing a subset because of a filter on an earlier card, its header shows a filter icon. ### Removing filters **Remove one filter**: Use **Clear this card's filter** (the close button in the badge list, or on the card's Filtered chip)\ **Remove all filters**: Click **Clear filters** in the badge list, or the × beside the badge ## Cross-card investigation patterns ### Pattern 1: Category → numeric analysis **Workflow**: Filter by category, then examine numeric distributions within that segment **Example**: 1. Double-click "Enterprise" in customer_tier 2. The revenue Explore Card, placed after it, shows the Enterprise customer revenue distribution 3. Discover: 80% of Enterprise revenue comes from 20% of customers ### Pattern 2: Time → category analysis **Workflow**: Filter by time period, then view categorical breakdowns **Example**: 1. Double-click "Q4 2024" in date Explore Card 2. The product_category card shows Q4 category performance 3. Discover: Holiday products drove 60% of Q4 sales ### Pattern 3: Outlier investigation **Workflow**: Filter by extreme values, then examine context **Example**: 1. Double-click the highest bar in the amount Explore Card (transactions over $10,000) 2. The customer_name card shows which customers have high-value transactions 3. The region card shows geographic concentration of large transactions 4. Discover: West Coast enterprise customers drive high-value transactions ![quantity card with a filter pill moved to the first position, beside city and order_date cards that recalculate on the filtered rows](https://mammoth.io/docs/images/20261009_193721_ExploreCardsNumericFilter.webp) ### Pattern 4: Multi-dimensional drill-down **Workflow**: Progressive refinement through multiple filters **Example: Sales performance investigation**: 1. Filter to "West" region (3,200 records) 2. Add "Electronics" product filter (1,850 records) 3. Add "Q4 2024" time filter (420 records) 4. Result: West Coast Electronics sales in Q4—specific, actionable segment Each filter reveals patterns that only exist within that combination—insights impossible to spot without progressive discovery. ## Filter-to-pipeline conversion You can convert your explore filters into a pipeline task or a new View, so the filtering logic is saved. ### The exploration-to-automation workflow **Step 1: Explore with filters** (temporary investigation) - Double-click values or use **Filter** to filter - Test different filter combinations - Validate business logic through interaction - Confirm this filtering produces the desired dataset **Step 2: Convert to permanent logic**\ When you've found useful filters, open the menu (≡) at the left of the Explore panel. Mammoth offers two options: ### Option A: Create new View with filters applied Choose **Create New View with these filters applied**. Mammoth shows a name box (the default name is "Filtered View"); click **Submit**. **What happens**: - Another View is created within the same Dataset, named as you entered - Your current filters are applied to that new View - The original View remains unchanged - The new View opens **When to choose**: - You want to create a permanent filtered dataset - Multiple team members need this specific segment - Filters define a regular business segment (e.g., "Enterprise Customers West Coast") ### Option B: Convert filters into a pipeline task Choose **Convert these filters into a Task in the Pipeline**. **What happens**: - The Functions panel opens with a Conditional Filter pre-filled from your filters - Review it, then apply it to add the task to the current View's pipeline - The task runs as part of the pipeline from then on **When to choose**: - You want to modify the current View permanently - Filters represent data quality rules - You're building a complete transformation pipeline > Start with explore filters for exploration, then convert successful discoveries into a pipeline task. ## Common investigation workflows ### Workflow 1: Data quality investigation **Goal**: Identify and standardize inconsistent values 1. **Scan text Explore Cards** for values that look like variations 2. **Click suspicious values** → examine the More options menu 3. **Double-click to filter** → see all records with this value 4. **Determine**: Valid variation or standardization needed? 5. **Action**: Apply Bulk Replace or Find & Replace **Example**: customer_name shows "Apple Inc.", "Apple Inc", "Apple Incorporated"\ → Use Bulk Replace to standardize all to "Apple Inc." ### Workflow 2: Outlier investigation **Goal**: Understand extreme values in your data 1. **Scan the numeric Explore Card** for unexpected ranges or outliers 2. **Double-click the outlier bar** → filter to extreme values 3. **Cross-reference with other columns** (date, category, source) 4. **Determine**: Data error or legitimate edge case? 5. **Action**: Conditional Filter to exclude or create special handling **Example**: price shows transactions at $999,999\ → Investigation reveals test transactions that should be filtered out ### Workflow 3: Temporal pattern analysis **Goal**: Understand time-based trends and anomalies 1. **Review the date Explore Card** for spikes, gaps, or unusual patterns 2. **Double-click an interesting period** → filter to that timeframe 3. **Observe other cards** → what drove the pattern in that period? 4. **Discover root cause** through progressive filtering 5. **Action**: Create a period-specific View or trend analysis **Example**: March 2024 sales spike\ → Investigation reveals successful product launch driving regional performance ### Workflow 4: Segment discovery **Goal**: Define meaningful business segments through data 1. **Filter by primary attribute** (region, product line, customer tier) 2. **View distributions within segment** → look for unexpected patterns 3. **Add additional filters** → refine segment definition 4. **Validate segment value** through multiple dimensions 5. **Convert to permanent segment** with filter-to-pipeline conversion ## Getting started with interactions ### Your first investigation 1. **Open any View** with your data loaded 2. **Open the Explore panel** and add a few columns with **Add card** 3. **Click a value** → see the selection bar appear 4. **Double-click the same value** → watch the cards after it update 5. **Try a second filter** → see progressive discovery in action 6. **Remove filters** → click **Clear filters** to reset ### Building investigation skills **Start simple**: Begin with obvious categories (region, product, status)\ **Look for co-occurrence**: What happens when you filter Category A and Category B together?\ **Question assumptions**: Use filters to validate what you think you know about your data\ **Follow curiosity**: Unexpected patterns often lead to valuable insights ## Explore filters vs pipeline tasks Explore filters and pipeline tasks are both ways to filter data in Mammoth, but they serve different purposes and behave differently. The table shows the differences. | | Explore filters | Conditional Filter tasks | | --- | --- | --- | | **Purpose** | Exploration and investigation | Automated data processing | | **Created by** | Explore Card interactions | Transform menu or filter-to-pipeline conversion | | **Visibility** | Filter badge beside the Explore toggle and chips on cards | Tasks in the Pipeline panel | | **Scope** | Changes what the grid and cards show while you explore | Part of the pipeline; runs on every data refresh | | **Best for** | "Let me investigate this segment" | "Always exclude test data from this View" | **The intended workflow**—use explore filters to investigate and validate your filtering logic interactively, then convert successful combinations into a pipeline task using the ≡ menu when you want that logic to run on every refresh. ## Troubleshooting interactions ### Filter doesn't apply **Problem**: Double-click doesn't filter **Solutions**: - Double-click quickly—two slow clicks are read as two separate clicks, which toggle the selection on and off. Click **Filter** to apply the selection instead - Double-click the value itself, not empty space around it - Check that you have edit access to the workspace. Filtering is unavailable in view-only workspaces - Refresh the View if the display seems unresponsive ### Cards don't update **Problem**: Other Explore Cards don't recalculate after filtering **Solutions**: - Cards recalculate only for cards after the one you filtered. Drag the card you want to analyze to the right of the filtered card - Check the filter badge to confirm the filter was applied - Try removing and re-adding the filter ### Unexpected results **Problem**: Filter shows different data than expected **Solutions**: - Check the filter list in the badge matches your intent - Verify column name and value spelling - Review data quality—might reveal actual data inconsistencies - Select values first and check the row count in the selection bar before filtering --- # Numeric column cards URL: https://mammoth.io/docs/learn/explore-discover/explore-cards-numeric/ · Updated: 2026-11-02 Numeric Explore Cards show a column's histogram, five summary statistics and automatic range grouping so you can spot outliers and placeholder values. Numeric column cards are Explore Cards that show a bar chart with automatic range grouping and a five-statistic summary. They reveal distribution shape, outliers, and data quality issues. Add a numeric column to the Explore panel to see one. ![Numeric Explore Card for quantity with a column chart, the chart type and Count menus and the Sum, Min, St.Dev, Average and Max statistics](https://mammoth.io/docs/images/20261009_194011_NumericExploreCard.webp) ## What numeric Explore Cards show ### Vertical bar chart layout Numeric columns display as **vertical bar charts** where each bar represents a range of values and its height shows how many records fall within that range. - **Bars extend upward**, height proportional to frequency - **Range labels** sit on the X axis below each bar (e.g., "100 to 200", "200 to 300") - **Blank values** appear as a `(blank)` entry - **Hover any bar** to see a tooltip showing the exact range, its count and its share of the rows, e.g. "100 to 200", with the hint "Click to select, drag across for a range" - **Statistical summary** below the chart ![Two numeric cards side by side, quantity and sales, each with a column chart and Sum, Min, St.Dev, Average and Max statistics](https://mammoth.io/docs/images/20261009_194203_NumericCardsSideBySide.webp) ### Five essential statistics Below each chart, five statistics are calculated automatically: | Statistic | What it tells you | | --- | --- | | **Sum** | Total of all values—useful for revenue, quantities, weights | | **Average** | Arithmetic mean—your "typical" value | | **Min** | Smallest value in the column | | **Max** | Largest value in the column | | **St.Dev** | Standard deviation—high means wide spread, low means consistent values | ![Numeric card statistics: Sum 25.6k, Min -492, Max 499, Average 251, St.Dev 156.6](https://mammoth.io/docs/images/20260408_140937_Date_card19.webp) ### Columns view and list view Numeric Explore Cards have two views, which you switch with the chart type dropdown in the card header: - **Columns**—the default vertical bar chart, best for seeing distribution shape - **List**—shows the same ranges as a list, useful for reading exact counts per range ## Card controls Numeric Explore Cards have these controls: the aggregation menu in the card header, the chart type dropdown, the **More options** menu (⋮), and, in list view, **Search values** and **Sort by** above the list. ### Show values by and granularity Clicking the aggregation menu in the card header (it reads **Count** by default) opens a panel with two settings that are applied together: Show values by—controls what the card measures for each range. By default it shows COUNT (number of rows), but you can switch to the aggregation of any numeric column in your dataset—for example Sum of revenue or Average of order value. Supported functions: | Function | What it shows | | --- | --- | | **COUNT** | Number of rows per range (default) | | **SUM** | Total of the selected numeric column per range | | **AVG** | Average of the selected numeric column per range | | **MIN** | Smallest value of the selected numeric column per range | | **MAX** | Largest value of the selected numeric column per range | | **STDDEV** | Standard deviation of the selected numeric column per range | | **DISTINCT_COUNT** | Number of distinct values of the selected column per range | Granularity—controls the range size used for grouping. The current granularity is shown in the dropdown (e.g., "100" means bars represent ranges of 100 units). You can change this to a finer or coarser grouping, in powers of ten. Once you've set both options, click **Apply** to update the card, or **Cancel** to discard changes. ![price card Count menu open, with Show values by COUNT, a Granularity dropdown set to 1,000,000, and Apply and Cancel buttons](https://mammoth.io/docs/images/20260408_142356_Countdropdownpanel1.webp) ### More options menu (⋮) The **More options** button in the card header opens a menu. The first three actions appear only when you have selected one or more bars (or list rows) and you can edit the workspace. The full list is: - **Replace all values like this**—opens Label & Insert Values with the selection filled in as the condition - **Remove all values like this**—opens Conditional Filter set to remove records in the selected ranges - **Keep all values like this**—opens Conditional Filter set to keep only records in the selected ranges - **Add to dashboard…**—adds the card to a dashboard, when your role allows editing dashboards in the project - **Copy values to clipboard**—copies the list of ranges and counts - **Export list as CSV**—exports ranges and counts as a CSV file - **Export Image as PNG**—exports the chart as a PNG image (chart views only), useful for reports and presentations ![quantity card with one bar selected and the More options menu open, listing Replace, Remove and Keep all values like this, Add to dashboard, Copy values to clipboard, Export list as CSV and Export Image as PNG](https://mammoth.io/docs/images/20261009_193931_NumericCardMoreOptions.webp) ### Search and sort Search values—available above the list in list view, lets you find a specific range. Most useful when a column has many distinct ranges. Sort by—available above the list in list view only. Choose what to sort by, then **Ascending** or **Descending**, and click **Apply**: - The card's measure (Sum, Count, etc.) - The column's values—numeric order ![quantity card in list view with the Sort by menu open, showing a Count dropdown, a Descending dropdown, and Cancel and Apply buttons](https://mammoth.io/docs/images/20261009_194034_NumericCardListSort.webp) ## Automatic grouping Mammoth automatically selects a grouping granularity based on your data range, so you don't need to configure bins. ### Automatic granularity selection Mammoth picks the bucket width on a logarithmic scale based on the column's range (max − min): one power of ten below the range's order of magnitude. The bucket width is always a power of ten, and it grows automatically as the range widens. A column where every value is the same gets 0.1-wide buckets, and ranges under about 1 get finer buckets still: | Approximate data range | Auto bucket width | Example ranges | Typical use | | --- | --- | --- | --- | | ~1–3 | 0.1 | 0.0–0.1, 0.1–0.2 | Percentages, yield rates, ratios | | ~3–32 | 1 | 0–1, 1–2, 2–3 | Small whole-number counts | | ~32–316 | 10 | 0–10, 10–20, 20–30 | Ages, temperatures, small counts | | ~316–3,162 | 100 | 0–100, 100–200 | Sales amounts, order quantities | | ~3,162–31,623 | 1,000 | 0–1k, 1k–2k | Monthly revenue, transaction volumes | | ~31,623–316,228 | 10,000 | 0–10k, 10k–20k | Annual revenue, enterprise metrics | | ~316,228–3,162,277 | 100,000 | 0–100k, 100k–200k | Large enterprise/aggregate totals | The pattern continues for larger ranges (each tenfold increase in range gives a tenfold wider bucket). The transition points are approximate because Mammoth rounds to the nearest power of ten. You can override automatic selection at any time using the aggregation menu in the card header. When a filter reduces the data range, the automatic granularity is recalculated for the remaining rows. ![quantity card with the bar for value 2 hovered, and a tooltip reading Count: 3, 25%, with the hint Click to select, drag across for a range](https://mammoth.io/docs/images/20261009_194131_NumericCardBarTooltip.webp) ## Distribution patterns to recognize ### Normal distribution Most values cluster in the middle with fewer at the extremes. Tallest bars in the center, tapering toward the edges. Common in employee salaries, product weights, manufacturing measurements. An abrupt drop at either edge may indicate missing data rather than natural distribution. ### Skewed distribution Values concentrate heavily at one end with a long tail in the other direction. Common in customer transaction amounts (many small, few very large) and support ticket response times. The tail often contains values worth investigating. ### Bimodal distribution Two separate clusters of tall bars with a visible gap between them. Common in datasets mixing two distinct populations—for example SMB vs Enterprise deal sizes, or day-shift vs night-shift temperatures. Usually signals a segmentation opportunity. ![Three numeric cards side by side (Sodium, Carbohydrates, Dietary Fiber), each with a histogram and statistics](https://mammoth.io/docs/images/20260408_143421_Threeside-by-sidecharts.webp) ## Spotting data quality issues ### Outlier detection A bar far separated from the main distribution is the most common quality signal. For example, a price column where most values sit between $10 and $100 with one isolated bar at $10,000 likely indicates a data entry error or a special case needing validation. To investigate, hover the outlier bar to see the exact count, then click it to select it and use **Filter** to examine those specific records. ![price histogram with most values in the middle bins and one isolated bar at the far right, 9,800](https://mammoth.io/docs/images/20260408_142537_Histogramshowingmaindistribution_with_one_islolated1.webp) ### Values outside expected business range The card displays the full distribution of your data including negative values—the card itself does not flag any value as invalid. Whether a value falls outside an acceptable range is a business judgment, not something Mammoth determines automatically. **Examples of what to look for:** - Negative values in columns where they make no business sense (e.g., product prices, order quantities) - Values far above a known maximum (e.g., ages above 120, percentages above 100) - Large clusters at a single suspicious value (e.g., 999, -1, 0) which may indicate a system default or placeholder For each case, hover the bar to confirm the count, then investigate those records before deciding whether to filter them out. ### Default or placeholder values An unusual spike where a large share of records share one identical value—particularly zero, 999, or -1—often indicates a system default being used in place of actual data. The distribution makes this immediately visible as a disproportionately tall single bar. ## Real-world examples ### Manufacturing quality control A production manager opens a View containing temperature sensor readings. The Explore Card shows a normal distribution centered at 22°C, with one isolated bar at 150–160°C. Hovering the outlier bar shows COUNT: 3. Filtering to the bar reveals all three records are from the same batch. Investigation confirms a faulty sensor reporting furnace temperature instead of ambient. A Conditional Filter is added to the pipeline to flag readings above 50°C automatically. ![temperature_celsius histogram with most values in the 20 to 30 bin; the tooltip reads COUNT 193](https://mammoth.io/docs/images/20260408_142454_Temperaturehistogramshowingnormaldistribution1.webp) ### Sales segmentation discovery A sales analyst reviewing deal values sees a **bimodal distribution** in the histogram, with one cluster of smaller deals and another cluster of larger deals, and relatively few transactions in between. This pattern highlights natural sales segments, allowing the team to quickly analyze **SMB and Enterprise pipelines separately** without writing a query. ![transaction_amount histogram with two clusters of bars: a tall one at the low end and a smaller one at higher values](https://mammoth.io/docs/images/20260408_142512_Bimodalhistogram1.webp) ## Troubleshooting **Statistics don't update after filtering** - Check that the filter badge beside the Explore toggle shows the filter was applied - Ensure you clicked **Filter** (or double-clicked a bar) rather than just selecting it, because selecting alone does not filter the grid **Too many bars, chart is hard to read** - Open the aggregation menu and increase the Granularity value (e.g., change from 10 to 100) - A very large bar count may itself indicate data quality issues worth investigating **Distribution doesn't match expectations** - Check Min/Max for values outside the expected business range - Look for a spike of identical values—may indicate a system default or placeholder - Consider whether the data has seasonal or time-based patterns that a Date card would better reveal **Chart jumps to a coarser granularity than expected** - Automatic granularity depends on the range of the data currently counted, so it can change when a filter is applied - Use the aggregation menu to set the granularity you want and click Apply **Statistics appear incorrect** - Verify the column data type is numeric—text-formatted numbers won't calculate correctly - Check for hidden characters or currency symbols by examining the raw data grid --- # Explore Cards URL: https://mammoth.io/docs/learn/explore-discover/explore-cards-overview/ · Updated: 2026-11-02 Explore Cards show the values, distribution or timeline of a column above the Mammoth data grid, and let you filter the grid by clicking a value. Explore Cards are interactive cards that show what is inside a column: the distinct values of a text column, the distribution of a numeric column, or the timeline of a date column. You choose the columns to explore, then click values on a card to filter the grid. Use them to see what is in your data and spot problems before you build any transformation. ![Explore panel above the data grid with three cards: city (text), quantity (numeric) and order_date (date), and the Add card button at the left](https://mammoth.io/docs/images/20261009_193601_ExploreCardsPanel.webp) ## Open the Explore panel The Explore panel sits above the data grid. Use the **Explore** toggle in the action bar to show or hide it. When explore filters are active, a filter badge with a count appears beside the toggle, and each filtered card shows its filter as a pill in the card header. A View with no cards yet shows **No cards yet** and the hint "See what's in any column, then click values to filter the grid." Mammoth may offer a few **Suggested** columns to start from. ## Add cards You add the cards you want, and Mammoth remembers them for the View. Use the **Add card** button on the left of the panel to open the **Explore a column** list, find a column with **Search columns**, and select it. The same menu also adds three other kinds of card, each with its own menu entry (**Describe a filter in plain words**, **Search all columns** and **Compare two number columns**): - **Ask**—describe the rows you want in plain words, for example "channel is Amazon and quantity over 2", and Mammoth turns it into a filter - **Search**—search every column for a word, with matches highlighted in the grid - **Compare**—plot one number column against another in a scatter chart. It needs at least two number columns in the View Drag a card by its header to reorder it, drag its edge to change its width, and close it with **Close card**. To resize the panel, drag its edge or choose a panel height (small, medium, or large). ## Card types Each column card matches the data type of its column. Text columns show a ranked list of distinct values sorted by frequency, each with a horizontal frequency bar and percentage share. You can also switch to a donut or treemap view. These are ideal for spotting category inconsistencies, missing data, and standardization opportunities. Numeric columns show a bar chart of value ranges (the Columns view) with a five-statistic summary, or a list of the same ranges. These reveal distribution shape, outliers, and data quality issues. Date columns show a bar chart of time periods (the Columns view), a timeline, or a list, with the earliest and latest values below. These expose seasonality, missing periods, and business cycle patterns. Switch between views with the chart type dropdown in the card header. For details on each card type, see: - [Text column cards](https://mammoth.io/docs/learn/explore-discover/explore-cards-text/) - [Numeric column cards](https://mammoth.io/docs/learn/explore-discover/explore-cards-numeric/) - [Date column cards](https://mammoth.io/docs/learn/explore-discover/explore-cards-date/) ## How Explore Cards work Each card queries the View, so cards describe the View's data after its pipeline. Cards react to your selections: when you filter on one card, the cards to its right recalculate on the filtered rows. See [Explore Cards—Interactions](https://mammoth.io/docs/learn/explore-discover/explore-cards-interactions/). ![Explore panel with a yellow filter pill on the city card, a filter badge beside the Explore button, and the grid showing the two matching rows](https://mammoth.io/docs/images/20261009_193646_ExploreCardsFilterPill.webp) ## Data quality detection Explore Cards surface quality issues. Blank values appear at the top of text cards so completeness gaps are immediately visible. Outliers stand out at the extremes of numeric bar charts. Missing time periods show as gaps in date charts. After you load new data, scan the Explore Cards for your key columns as a quick quality check. ## Interacting with Explore Cards Clicking values in Explore Cards filters your data so you can investigate patterns across columns. For the full details, see [Explore Cards—Interactions](https://mammoth.io/docs/learn/explore-discover/explore-cards-interactions/). ## Next steps - [**Text column cards**](https://mammoth.io/docs/learn/explore-discover/explore-cards-text/)—Understand categorical distributions and fix text quality issues - [**Numeric column cards**](https://mammoth.io/docs/learn/explore-discover/explore-cards-numeric/)—Analyze distributions, statistics, and numeric outliers - [**Date column cards**](https://mammoth.io/docs/learn/explore-discover/explore-cards-date/)—Discover temporal patterns and validate date data - [**Explore Cards—Interactions**](https://mammoth.io/docs/learn/explore-discover/explore-cards-interactions/)—Filter, investigate, and convert discoveries into pipeline tasks --- # Text column cards URL: https://mammoth.io/docs/learn/explore-discover/explore-cards-text/ · Updated: 2026-11-02 Text Explore Cards list a text column's distinct values with counts so you can spot spelling, case and whitespace problems, then filter or fix them. Text column cards are Explore Cards that show the distinct values in a text column as a list sorted by frequency, with a horizontal bar behind each value indicating its relative count and percentage share of the total. They make categorical data quality issues immediately visible—inconsistent spellings, case variations, extra spaces, and missing values all appear as separate rows rather than hiding in thousands of records. ![Text Explore Card for city listing each value with a bar, its count and its percentage, with Select all, search and sort controls, the layout and Count menus, and the hint Click to select, double-click to filter](https://mammoth.io/docs/images/20261009_194257_TextExploreCard.webp) ## What text Explore Cards show ### Visual layout When you add a text column to the Explore panel, its card displays: - **Card header**—shows the column name and the number of unique values, e.g. `product_name 9 unique values` - **Values listed as rows**, by default from most to least frequent - **Horizontal frequency bar** behind each value, sized relative to the largest share in the list - **Count and percentage** shown on each row, e.g. `20` and `20%`. The percentage is rounded to a whole number, and shows `<1%` for very small shares. It appears only while the card shows Count - **Blank values** shown as a `(blank)` row - **Select all** and **Invert** controls, **Search values**, and **Sort by** above the list - **Aggregation menu** in the card header—the **Show values by** control (Count by default) - **Chart type dropdown** in the card header—List (default), Donut, and Treemap ![city text card with the Count menu open, showing Show values by COUNT, Formatting buttons, a Short Form checkbox, and Cancel and Apply buttons](https://mammoth.io/docs/images/20261009_194321_TextCardCountMenu.webp) ## Card options Each Text Explore Card has these controls: the aggregation menu in the card header for changing what the card measures, the search and sort buttons above the list, and the **More options** menu (three-dot button in the card header) for whitespace display, copy, and export. ### Change aggregation The aggregation menu in the card header controls what the card measures for each value—this is the **Show values by** setting. By default it shows the count of rows for each unique value, but you can switch it to an aggregation (COUNT, DISTINCT_COUNT, SUM, AVG, MIN, MAX, or STDDEV) of a numeric column in your dataset. **Example:** On a `supplier_name` text card, switching from Count to Sum of `invoice_amount` changes the card from showing *how many records* exist per supplier to showing *total spend* per supplier—without writing any formula or query. SUM, AVG, MIN, MAX, and STDDEV need a numeric column in your View to measure. Donut and Treemap views show each value's share of the total, so they are available only when the value is set to Count or Sum. ### Search values The **Search values** button above the list lets you filter the value list to find a specific entry. Useful when a column has many distinct values and scrolling isn't practical. ### Sort The **Sort by** menu above the list lets you change the order of values. Choose what to sort by—the card's measure (such as Count) or the column's values—then choose **Ascending** or **Descending** and click **Apply**. ### Show whitespaces Available in list view as the **Show Whitespaces** checkbox at the top of the **More options** menu—it visualizes whitespace characters in values, with extra spaces emphasized. This makes leading and trailing space issues immediately visible—values that look identical like "Company" and " Company" are clearly distinguished when whitespace is shown. Use this whenever you suspect extra spaces are causing values to appear as duplicates in your analysis. ![city text card with the More options menu open, listing a Show Whitespaces checkbox, Add to dashboard, Copy values to clipboard and Export list as CSV](https://mammoth.io/docs/images/20261009_194348_TextCardMoreOptions.webp) ### Copy values to clipboard Available from the **More options** menu—**Copy values to clipboard** copies the list of values to your clipboard. Useful for pasting into other tools or documenting what values exist in a column. ### Export list as CSV Available from the **More options** menu—**Export list as CSV** exports the list of values and their counts as a CSV file for offline review or sharing. ### Export image as PNG In the Donut and Treemap views, **Export Image as PNG** in the **More options** menu exports the chart as a PNG image. It is not offered in list view. ![city text card with the More options menu open, listing a Show Whitespaces checkbox, Add to dashboard, Copy values to clipboard and Export list as CSV](https://mammoth.io/docs/images/20261009_194348_TextCardMoreOptions.webp) ### Select values Text Explore Cards are interactive. Click a value to select it—a checkbox marks each selected value, and a bar appears with the number of selected values and the **Filter** and **Exclude** buttons. Multi-select: a plain click toggles a value, so you can select several one by one. Hold **Shift** while clicking to select a run of values from the last one you clicked. **Select all** selects every value, and **Invert** flips the selection. Filter one value: double-click a value to filter to it right away. Deselect: click **Clear selection**, or press **Esc**. ### Blank values Blank values appear as a `(blank)` row with their own count, so data completeness gaps are visible alongside every other value. ### Resize cards Drag the edge of a card to widen it when value names are being cut off. Hover a truncated value to see it in full. ## What you discover immediately **Data quality issues:** - Spelling variations: "Service" vs "Services" vs "service"—each appears as a separate row - Formatting inconsistencies: "B&Q" vs "B & Q" vs "B and Q" - Case sensitivity: "Travel" vs "travel" vs "TRAVEL"—each with its own count and percentage - Extra whitespace: " Company" appearing separately from "Company" - Missing data: a `(blank)` row with its count and percentage share **Business patterns:** - Most common categories and their exact percentage of total records - Rare or unexpected values and how much of your data they represent - At-a-glance completeness—the percentage on each row tells you the data share instantly ## Real example: Supplier name variations A retail customer used Text Explore Cards to resolve a supplier reporting problem. **What the Explore Card revealed** for their supplier name column: - "B&Q"—45 (41%) - "B & Q"—23 (21%) - "B and Q"—18 (16%) - "B&Q Ltd"—14 (13%) - "B&Q Limited"—10 (9%) *"You can imagine B and Q. There's lots of opportunities: B and Q, B space and Q... they have like 5 different spellings."* A single Bulk Replace transformation standardized all 863 records, enabling accurate supplier spend reporting. ![supplier_name card listing five spellings of B&Q with counts, such as B&Q 45 and B and Q 18](https://mammoth.io/docs/images/20260408_101901_BQ_supplier_name_text_card1.webp) ## Common quality patterns ### Pattern 1: Inconsistent formatting **What you see:** - "Electronic Widget A"—20 (20%) - "Electronic Widget-A"—15 (15%) - "Elect Widget A"—8 (8%) Same product, entered differently. The percentages immediately show how widespread each variation is. Use **Bulk Replace** to map all variations to a single standard value. ### Pattern 2: Case sensitivity **What you see:** - "Travel"—18 (18%) - "ad-hoc"—17 (17%) - "Business Travel"—15 (15%) - "travel"—14 (14%) - "TRAVEL EXPENSES"—9 (9%) Expense categories inconsistently entered. The percentage column makes it easy to see which variation is dominant and should become the standard. ### Pattern 3: Abbreviation variations **What you see:** - "Ad hoc"—89 (52%) - "ad-hoc"—45 (26%) - "adhoc"—23 (13%) - "Ad Hoc"—12 (7%) *"I can see that there are some spelling issues like, you know, ad hoc versus ad hoc, and different spellings and things like that."* Consolidate to one standard format using Bulk Replace. ![category text card with inconsistent casing (smartphones, SMARTPHONES) above a Bulk Replace panel that groups the variants](https://mammoth.io/docs/images/20260408_104833_Side-by-sidecomparison_textcardwithmessy.webp) ## Transformations available from text cards When you identify a quality issue in a Text Explore Card, you can launch a transformation directly from the card without leaving the View. Select one or more values, then open the **More options** menu, which includes: - **Replace all values like this**—opens Bulk Replace with the selected values filled in, so you can map them to a single standard value - **Remove all values like this**—opens Conditional Filter set to remove the selected values - **Keep all values like this**—opens Conditional Filter set to keep only the selected values For how clicking and filtering works in detail, see [Explore Cards—Interactions](https://mammoth.io/docs/learn/explore-discover/explore-cards-interactions/). ## Troubleshooting **Card shows unexpected or empty results** - Verify the column contains text data and is not entirely null - Check that the column data type is correctly identified as text - Refresh the View if data was recently updated **Too many values to read easily** - Cards load values in frequency order and fetch more automatically as you scroll—you don't need to load the whole list up front - Use **Search values** to jump straight to a specific value instead of scrolling - Consider whether the column needs a categorization transformation to reduce cardinality **Percentages don't add up to 100%** - Percentages are rounded to whole numbers, so the visible rows may not add up to exactly 100% - Percentages are relative to the rows the card is counting—if this doesn't match what you expect, check whether a filter on an earlier card is applied (the card header shows a filter icon) - Scroll down within the card to load and check lower-frequency values --- # Explore & discover URL: https://mammoth.io/docs/learn/explore-discover/ · Updated: 2026-11-02 Explore a Mammoth View before you transform it: Explore Cards, the Metrics panel, the Data Quality Report and View Insights, and which one to start with. Mammoth's exploration tools show you what is in a View before you build any transformation. They are for analysts who need to understand a new dataset, check its quality, or find a pattern. Start with [Explore Cards](https://mammoth.io/docs/learn/explore-discover/explore-cards-overview/) if you just loaded data, or with the table in [Where to start](#where-to-start). ![Animation of a manufacturing data View with Explore Cards for shift, scrap_count, temperature_celsius and date above the grid](https://mammoth.io/docs/images/20260403_174848_ProgressiveDiscoveryWorkflow.webp) ## Tools in this section ### Explore Cards Explore Cards are interactive cards for the columns you choose to explore. Text columns show value distributions, numeric columns show histograms with statistics, and date columns show temporal patterns. Use them to spot quality issues, understand distributions, and investigate patterns through interactive filtering. [Explore Cards overview](https://mammoth.io/docs/learn/explore-discover/explore-cards-overview/) ### Metrics panel The Metrics panel calculates KPIs and summary statistics. Create a metric from a column in one click (Sum, Average, Standard Deviation, Min, or Max), or write a formula or SQL expression. Metrics update as you apply explore filters. [Metrics panel](https://mammoth.io/docs/learn/explore-discover/metrics-panel/) ### Data Quality Report The Data Quality Report is an automated quality assessment based on the DAMA framework. Identifies completeness gaps, casing inconsistencies, duplicates, and outliers across all columns, with recommended pipeline tasks you can build. [Data Quality Report](https://mammoth.io/docs/learn/explore-discover/data-quality-report/) ### View Insights View Insights are AI-generated plain-English summaries of the patterns and anomalies in your data. Useful for quick orientation to an unfamiliar dataset or generating narrative summaries of key findings. [View Insights](https://mammoth.io/docs/learn/explore-discover/view-insights/) ## Where to start Pick a tool by what you want to do: | Goal | Start with | | --- | --- | | I just loaded new data and want to understand it | Explore Cards | | I need to check data quality before building a pipeline | Data Quality Report | | I want a quick summary of key numbers | Metrics panel | | I want AI to tell me what's interesting in my data | View Insights | | I want to investigate a specific pattern or segment | Explore Cards, then filter interactively | ## Next steps After you explore your data, you can turn what you found into pipeline tasks. See [Explore Cards—Interactions](https://mammoth.io/docs/learn/explore-discover/explore-cards-interactions/) for how to convert exploration filters into pipeline tasks that run on every refresh. To choose between tools in more detail, see [When to use each](https://mammoth.io/docs/learn/explore-discover/when-to-use-each/). Also in this section: [Column Browser](https://mammoth.io/docs/learn/explore-discover/column-browser/), which lists, searches, hides and reorders every column in a View. --- # Metrics panel URL: https://mammoth.io/docs/learn/explore-discover/metrics-panel/ · Updated: 2026-11-02 Create single-value metrics such as Sum, Average or custom formulas in the Mammoth Metrics panel, format them, and lock them while explore filters change. The Metrics panel calculates single-value metrics from your columns, such as total revenue, average deal size, or defect rate. Metrics update as you filter your data in Explore Cards. ![Metrics panel open beside the data grid with two metric cards: Avg of Shipped Weight 7,040.35 and Max of Quantity Sold 3983](https://mammoth.io/docs/images/20260421_090742_Metric_panel_with_metric_card1.webp) Use it for sales monitoring, quality control tracking, and financial compliance, where you need key numbers at a glance. ## Create metrics You can create a metric from a column header or from the Metrics panel. ### Path 1: From the data grid column header To create a metric for one column, start from the data grid. 1. Hover a numeric column header in the data grid 2. Click the **Create Metric** icon that appears in the column header (it appears on numeric columns only) 3. A "Create Metric" popup appears with: - **Metric name**: Auto-populated (e.g., "Sum of quantity_on_hand")—editable - **Function**: Dropdown to select your aggregation (Sum, Average, Standard Deviation, Min, or Max) - **Formatting**: Currency, percentage, decimal, and short form options 4. Click **Create Metric** to add it to the panel instantly. A "Metric added" message confirms it 5. Click **More options** instead to open the full metric editor (Title, Subtitle, Description, expression, conditions) with these settings filled in ![Create Metric popover opened from the quantity column header, with Metric name, Function, Formatting, Short Form, More options and Create Metric](https://mammoth.io/docs/images/20261009_195053_CreateMetricPopover.webp) ### Path 2: From the Metrics panel There are two ways to open the Metrics panel: - **Action bar:** Click the **Metrics** icon in the action bar at the top of the data editor, next to the Highlights icon. The icon shows an active state when the panel is open. - **Right-edge tab:** Click the rotated "Metrics" tab on the right edge of the View interface. When the View has metrics, the tab shows how many. Both open the same Metrics panel. ![View with the Metrics tab open, showing the Create a metric empty state and a New Metric button](https://mammoth.io/docs/images/20260605_092228_metrics-toolbar-icon-active1.webp) When no metrics exist, the empty state displays: - **"Create a metric"** heading - **"Use this space to create some metrics from numerical data"** description - **+ New Metric** button Click **+ New Metric** to open the full New Metric modal. Metrics are unavailable in Preview mode. The panel says so, and when the View has metrics it offers **Exit Preview**. ### New metric modal The New Metric modal opens in **SQL** mode by default, with an AI-powered expression generator at the top. When enabled for your workspace, a switch lets you change between **SQL** and **Formula** modes. The book icon next to the title opens this documentation. ![New Metric modal with a prompt box and Generate button, SQL and Formula tabs, SQL Expression, Format with Display in short form, a Title field, Add More Details, and Cancel and Submit buttons](https://mammoth.io/docs/images/20261009_194758_NewMetricModal.webp) AI Generate (default—SQL mode) 1. Type a plain-English description in the box labelled "Describe what you want to generate"—for example: *"Create a metric for the total quantity sold"* 2. Click **Generate** (or press Enter)—the AI writes the SQL expression for you 3. Review the generated expression in the **SQL Expression** editor and adjust if needed 4. Optionally add a condition to filter which rows the metric includes. If your description includes a filter, Mammoth can extract it into the condition Formula mode Click **Formula** (next to **SQL**) to build the expression manually using functions and column references. You can add a condition to filter which rows the metric includes in this mode too. Right-side preview The modal shows a live preview panel on the right with: - A metric card rendering the current result - A data grid showing the underlying dataset rows Format section | Option | Description | | --- | --- | | Numeric (default) | Plain number | | Thousands separator (on by default) | Shows 1,234 instead of 1234 | | % | Percentage | | Currency | Choose a currency symbol—USD ($), EUR (€), GBP (£), JPY (¥), or INR (₹) | | Decimal arrows (< 0.00000 >) | Set precision up to 5 decimal places (2 by default). Disabled while short form is on | | Display in short form | Converts large numbers: 1,234,567 → 1.23M | Label section | Field | Description | | --- | --- | | Title | Primary label on the metric card (required) | | Add More Details | Expands to reveal Subtitle and Description fields | Click **Submit** to add the metric to the panel. **Submit** stays disabled, with a tooltip saying why, until the metric has a title and a valid expression, and while the SQL is still generating. If another metric already has the title, Mammoth adds a number to it (for example "Total sales 1"). ### Available functions **Quick dropdown (from the column header)**: - Sum, Average, Standard Deviation, Min, Max **Formula mode (full modal)**: - `COUNT()`, `SUM("Column")`, `AVG("Column")`, `MIN("Column")`, `MAX("Column")`, `STDDEV("Column")`, `INT(expression)`, `ABS(expression)` - Combine them with `+`, `-`, `*`, `/`, and parentheses **SQL mode (full modal)**: - Describe the metric in plain words and review the generated SQL expression. You can also edit the expression directly. > **Note**: Column names in formulas must be wrapped in double quotes—for example, `SUM("deal_value")` not `SUM(deal_value)`. ## Formula syntax examples In Formula mode, formulas use double-quoted column names. The formula editor shows "Looks good" when the syntax is valid. Net revenue calculation: ```plaintext SUM("gross_amount") - SUM("discount") - SUM("tax") ``` Performance against target: ```plaintext (SUM("actual_quantity") / SUM("target_quantity")) * 100 ``` Shows percentage achievement—format as percentage for display as 87.5%. Conditional aggregation: ```plaintext SUM("amount") ``` Add a condition such as `status` is `Completed` so the metric includes only completed transactions. Multi-condition count: ```plaintext COUNT() ``` Add conditions for `priority` is `High` and `status` is `Open` to count only records that are both high priority and currently open. For calculations that need different conditions in one expression, such as a defect rate, use SQL mode and describe the metric in plain words. ![New Metric modal in Formula mode with the formula SUM of sales divided by SUM of quantity marked Looks good, a preview card titled Sales per unit showing 123.19, and Format, Title and Add More Details](https://mammoth.io/docs/images/20261009_194914_NewMetricFormula.webp) ## Metric card fields When creating or editing a metric via the full modal, three text fields are available: - **Title**: The primary label displayed on the metric card (required). It starts as "Metric" in the New Metric modal, and as "Sum of quantity_on_hand"-style text when you start from a column header. Fully editable. - **Subtitle**: Optional secondary label shown below the value—useful for adding context such as "Q4 2024" or "West Region only." - **Description**: Optional longer text, shown in smaller grey text under the value on the metric card. Hover the card text to read it in full. ## Metric card actions A metric card shows its title (with a lock icon when locked), the value, the Subtitle, and the Description. A metric built from a plain-English description also shows that description in a row you can click to see the generated query, and a metric with a condition shows it as a filter summary. If a metric cannot be calculated, the card shows **Error**; hover it to see the reason. Hover a card to show its toolbar of five action icons (they are disabled while the pipeline has an error): | Icon | Action | Behavior | | --- | --- | --- | | Copy to clipboard | Copies the metric's title and current value | Instant—no modal. For example, `Total sales: 5.2M` | | Edit (pencil) | Opens the full metric editor | Same modal as New Metric—expression, Title, Subtitle, Description, and formatting all editable | | Duplicate | Creates a copy of the metric | Opens the "Duplicate metric" modal pre-populated with the original expression. Mammoth adds a number to the title (e.g., "Weight per unit sold 1"). Edit before submitting or accept as-is. | | Lock | Freezes the metric against explore filters | The metric keeps the filters that were active when you locked it, and does not change when you change explore filters. Click the icon again to unlock it. | | Delete (trash) | Removes the metric from the panel | Asks you to confirm before it deletes the metric | To add another metric once the panel already has cards, use the blue **+** button at the bottom of the Metrics Panel. When you have multiple metric cards, drag a card by its header to reorder it within the panel. ![Metrics panel with a Sales per unit card showing 123.19 and a hover toolbar with Copy, Edit, Duplicate, Lock and Delete icons](https://mammoth.io/docs/images/20261009_195010_MetricCardToolbar.webp) ## Format your metrics ### Currency Options: numeric (default), % (percentage), or currency—with a choice of USD ($), EUR (€), GBP (£), JPY (¥), or INR (₹). Controlled via the formatting toggle buttons in the creation popup and full modal. ### Decimal control Use the arrow controls next to the decimal display (`< 0.00000 >`) to set precision from 0 to 5 decimal places. ### Short form display Check "Display in short form" to convert large numbers to K, M, B format: - 1,234,567 → 1.23M - 45,600 → 45.6K ![New Metric modal with the Format currency menu open, listing the euro, dollar, yen, pound and rupee symbols](https://mammoth.io/docs/images/20261009_194945_NewMetricCurrencyMenu.webp) > **Tip**: Use currency for revenue metrics, percentage for rates and ratios, and short form for large volume counts. Match formatting to how your stakeholders expect to see the numbers. ## Dynamic updates with filters Metrics recalculate when you filter data through Explore Cards, giving you segmented analysis. ### How dynamic updates work Initial state (all data): - Total Revenue: $5.2M - Average Deal: $12,340 - Order Count: 421 - Win Rate: 67% After filtering (double-click "West" in the Region Explore Card): - Total Revenue: $1.8M *(West region only)* - Average Deal: $14,560 *(West deals are larger)* - Order Count: 124 *(West order volume)* - Win Rate: 72% *(West team performing better)* ![Animation comparing a View's metric values as a filter is applied to the Region card](https://mammoth.io/docs/images/20260421_163433_comparisonshowingmetrics.webp) ### Lock feature for comparisons Use the lock icon on a metric card to keep its value fixed while other metrics update with filters. Lock it while no filters are applied to keep the all-data value. Example workflow: 1. Lock "Total Revenue" at $5.2M 2. Filter by Region = West 3. Create a new Revenue metric (unlocked)—shows $1.8M 4. Compare: $5.2M (Total) vs $1.8M (West) = West represents 35% of total revenue ![Animation of a metric card being locked in the Metrics panel of a View with a Region card](https://mammoth.io/docs/images/20260421_164724_metric-lock1.webp) ## Real-world use cases ### Sales performance dashboard Scenario: sales manager tracking daily team performance Metrics created: - Daily Revenue: `SUM("deal_value")` - Average Deal: `AVG("deal_value")` - Deals Closed: `COUNT()` with the condition `status` is `Won` - Win Rate: SQL mode, described in plain words Dynamic analysis: filter by "Q4 2024" to see fourth-quarter performance. All metrics update, revealing Q4 average deal size is 23% higher than the annual average. ### Manufacturing quality control Scenario: quality assurance monitoring production line efficiency Metrics created: - Units Produced: `COUNT()` - Defects Found: `COUNT()` with the condition `defect_severity` is not `None` - Defect Rate: SQL mode, described in plain words - Average Yield: `AVG("yield_percentage")` Insight discovery: filter by "Night Shift" reveals 4.2% defect rate vs 2.1% overall average, triggering investigation into night shift procedures. ### Financial compliance monitoring Scenario: compliance analyst tracking high-value transactions for regulatory reporting Metrics created: - Total Transactions: `COUNT()` - High-Value Count: `COUNT()` with the condition `amount` > 10000 - Reportable Amount: `SUM("amount")` with the condition `amount` > 10000 - Compliance Rate: SQL mode, described in plain words ## Metrics panel vs other features ### Metrics panel versus Explore Cards | Feature | Metrics panel | Explore Cards | | --- | --- | --- | | **Purpose** | Single-value KPIs | Data distributions | | **Creation** | User-defined calculations | Added by you for any column | | **Display** | Large numbers with labels | Charts and ranked lists | | **Use Case** | Monitoring totals, averages | Pattern discovery, filtering | Use Explore Cards to discover patterns, then create Metrics to track key numbers from those discoveries. ### Metrics panel versus View Insights | Feature | Metrics panel | View Insights | | --- | --- | --- | | **Source** | Manual metric creation | AI-generated observations | | **Control** | Full user control | AI determines insights | | **Persistence** | Saved with View | Generated on demand, then saved until the View's data changes | | **Focus** | KPI monitoring | Business intelligence | > **Tip**: Create 3-5 core metrics for any dataset: total count, key sum (revenue or quantity), main average, and 1-2 business-specific ratios. These cover the basics of any dataset. ## Advanced metric patterns ### Segment comparison using lock 1. Create base metric (Total Sales) 2. Lock the metric—preserves original value 3. Apply filter (Region = East) 4. Create an identical unlocked metric—shows filtered value 5. Compare: $3.2M Total vs $1.1M East = 34% of business in East ### Running trend analysis 1. Create time-based metric (Monthly Revenue) 2. Filter by sequential months (Jan, Feb, Mar) 3. Watch metrics update for each period 4. Identify patterns (growth, decline, seasonality) ![View filtered to Region East, with the Metrics panel showing a locked Sum of deal_value 3,202,500.00 and an unlocked metric](https://mammoth.io/docs/images/20260421_091837_Metric_with_lock_and_unlock_filter1.webp) ## Troubleshooting ### Metric shows zero or error **Problem**: Metric displays 0 or an error message. **Solutions**: - Verify you selected the right column - Sum and Avg only work with numeric columns—check column type - Review formula syntax—column names must be in double quotes: `SUM("column_name")` - Check for null values that may affect the calculation ### Metric doesn't update with filters **Problem**: Metric stays the same when applying filters. **Solutions**: - Check the lock icon—locked metrics do not update. Click to unlock. - Verify the filter badge beside the Explore toggle shows an active filter - Refresh the View if needed ## Next steps - [Explore Cards—interactions](https://mammoth.io/docs/learn/explore-discover/explore-cards-interactions/): combine multiple filters for deeper segmentation. - [View Insights](https://mammoth.io/docs/learn/explore-discover/view-insights/): let AI summarize patterns in your data. - [Automations](https://mammoth.io/docs/learn/automations/): refresh data on a schedule to keep metrics current. --- # View Insights URL: https://mammoth.io/docs/learn/explore-discover/view-insights/ · Updated: 2026-11-02 View Insights uses AI to turn your View's column statistics into 3-7 plain-language observations. Learn how to generate them, when to regenerate, and limits. View Insights turns the statistical profile of your data into short business observations. You click a button and Mammoth's AI writes the most significant observations in plain language. Use it to orient yourself in an unfamiliar dataset, prepare talking points for a briefing, or find areas to investigate further. ![Animation of the cursor clicking View Insights in the toolbar above the data grid](https://mammoth.io/docs/images/20260421_170001_View_insights1.webp) ## What View Insights are View Insights generates 3-7 business-relevant observations about your data. The AI works from column statistics for the View, such as distributions, date ranges, concentrations, and gaps, and surfaces the most significant findings in natural language. ### How it works When you click the **View Insights** button in the action bar, Mammoth collects column statistics for the View and asks an AI model to turn them into business observations. The AI prioritizes: 1. **Revenue risks**: Concentration, declining trends, and underperforming segments 2. **Growth opportunities**: High-value segments and untapped patterns 3. **Decision blockers**: Missing data that prevents segmentation, forecasting, or targeting ![Menu opened from the 6 Key Insights button, listing six one-sentence insights about transactions, revenue and stores](https://mammoth.io/docs/images/20260421_170613_Howitworks.webp) ### What you get The AI generates 3-7 insights (more when several patterns or risks are present). Each is one short sentence with key numbers and terms in bold. Insights may include: - **Revenue concentration**: "67% of revenue is concentrated in Q3-Q4 period, with significant seasonal variation pattern detected" - **Regional disparities**: "East region accounts for 45% of sales volume but only 32% of revenue, suggesting lower average order values" - **Temporal patterns**: "Order processing time increased 23% in recent data compared to historical average" - **Data gaps**: "Customer contact details are missing for 15% of records, blocking personalized outreach" - **Risk signals**: "Shipments span from near-zero to 20.99K kg suggesting extreme order size variance that may indicate a fulfillment concentration risk" Insights are business-oriented—the AI provides observations and context to help you understand what the data means, not just raw statistics. They are not instructions to change your data—that judgment remains with you. ## Key distinctions ### Insights versus the Metrics panel The two features serve different purposes: | Feature | Key Insights | Metrics panel | | --- | --- | --- | | **Purpose** | AI-generated observations | User-defined calculations | | **Trigger** | Manual click | Open from the action bar | | **Output** | 3-7 business patterns | Custom Count, Sum, Average, etc. | | **Content** | "What AI noticed" | "What you want to measure" | | **Language** | Business observations | Numbers and formulas | ### Insights versus the Data Quality Report Both features analyze your data, but with different focus: | Aspect | View Insights | Data Quality Report | | --- | --- | --- | | **Framework** | AI pattern discovery | DAMA quality standards | | **Purpose** | Business intelligence | Quality assessment | | **Output** | Business observations | Issues + recommended pipeline tasks | | **Result** | "Here's what's interesting" | "Here's what needs fixing" | > **Tip**: Use both together. The Data Quality Report identifies issues to address, and View Insights reveals business patterns to explore. ## Generate insights ### Prerequisites - The View must contain data - No specific column types required - Works with raw uploads or transformed data - The pipeline must not be running. The button is unavailable in preview or edit mode and in View-only workspaces ### Steps **Step 1—Open your View** Navigate to any View containing the data you want to analyze. This can be freshly uploaded data or a View with pipeline transformations already applied. **Step 2—Find the View Insights button** Look for the **View Insights** button on the right side of the action bar, to the left of the Export button. The button appears only when View Insights is enabled for your workspace. Before you generate insights, the button reads "View Insights." Once insights have been generated, the label updates to show the count—for example, "6 Key Insights." **Step 3—Click the button** Click the button. This starts the AI analysis—insights do not generate automatically when you open a View. **Step 4—Wait for the analysis** The button changes to show "Analyzing Insights" and "This will only take a moment." ![Toolbar with an Analyzing Insights spinner in place of the View Insights button](https://mammoth.io/docs/images/20260421_174825_Toptoolbarshowing_AnalyzingInsights1.webp) **Step 5—Review the insights** Click the button again to open the list of 3-7 insights below it. The list scrolls when it is long. Each insight is a single sentence that includes: - Key terms and numbers in bold: highlights the primary data element or business concept - Business framing: numbers presented with business implications where relevant ![List of five key insights, such as negative quantity values and a six-day transaction window](https://mammoth.io/docs/images/20260421_175229_View_insights1.webp) ### Use insights effectively **For executive communication:** Copy insights into presentations or briefs. The AI uses business-friendly language with specific values and comparisons you can use as talking points. **For pipeline development:** Use discovered patterns to guide transformation tasks. If the AI flags inconsistent formatting or negative values, investigate those areas before building your pipeline. **For dashboard creation:** Convert significant patterns into dashboard KPIs. Revenue concentration insights become revenue trend charts; customer behavior patterns become segmentation views. **For further investigation:** Use Explore Cards to investigate specific patterns the AI surfaced. Apply filters to analyze the subsets or segments mentioned in insights. ## When to regenerate insights ### Regeneration triggers View Insights reflects the View's data at the time it was generated. When the View's data changes, the saved insights are cleared and the button returns to "View Insights". Regenerate when: - **After pipeline changes**: insights are not updated automatically when you add or run tasks - **New data added**: when the Dataset receives fresh batches - **Schema changes**: when columns are added or data types change ### How to regenerate Click the View Insights button after it has returned to its initial state. Previous insights are replaced, not saved alongside. If you need to keep the current insights for comparison, copy the text or take a screenshot before regenerating. Insights are saved with the View until its data changes, so reopening the View does not generate them again. ## Real-world use cases ### Use case 1: Executive briefing preparation **Situation**: A manager needs to brief the CEO on Q4 customer engagement before a 2 PM meeting. **Workflow**: 1. Opens customer_engagement View with 280,000 interaction records 2. Clicks the View Insights button 3. Receives business-critical patterns: - "Email engagement rates dropped 34% in November compared to September baseline" - "Mobile app users show 3.2x higher retention rates than web-only users" - "Premium tier customers interact 5x more frequently than basic tier" 4. Copies insights directly into executive brief **Outcome**: Ready-made talking points. CEO immediately asks for mobile app investment analysis based on the 3.2x retention insight. ### Use case 2: Initial data exploration **Situation**: A business analyst receives a new quarterly sales dataset from 3 regional databases—150,000 rows across 23 columns—with pressure to deliver insights for Friday's executive meeting. **Workflow**: 1. Uploads consolidated sales data to new View 2. Generates Key Insights before building any transformations 3. AI surfaces critical patterns: - "West region contributes 62% of total revenue despite 34% of transaction volume" - "Average order value declined 18% in March compared to February" - "Top 15 customers account for 41% of quarterly revenue" 4. Uses insights to guide dashboard creation and pipeline development **Outcome**: Five ready-made talking points for Friday's meeting, plus strategic focus areas identified for further investigation. ### Use case 3: Quality validation before production **Situation**: A technical user completed an transformation pipeline of 8 tasks and needs quality validation before publishing a dashboard to 40 stakeholders. **Workflow**: 1. Opens final transformed View (post-pipeline) 2. Runs Data Quality Report (shows "Good" 82% score) 3. Generates Key Insights for additional validation 4. AI reveals unexpected pattern: "Transaction amounts show unusual concentration at exactly $1,000 intervals (23% of records)" 5. Investigation reveals a data truncation issue in the source system 6. Fixes pipeline before dashboard publication **Outcome**: Caught a production issue before 40 stakeholders saw bad data. The combination of the Data Quality Report and Key Insights caught a problem that statistical summaries alone had missed. ### Use case 4: Trend discovery for budget planning **Situation**: A business analyst analyzes a 2-year sales history (2.3M rows) for budget planning with no specific hypothesis. **Workflow**: 1. Opens sales_history View with historical data 2. Generates Key Insights 3. AI reveals unexpected correlations: - "Sales to repeat customers increased 156% year-over-year while new customer acquisition declined 23%" - "Average days between purchases decreased from 47 to 31 days in Q3-Q4" - "Customers purchasing Product Line C show 4.1x higher repeat purchase rates" **Outcome**: Strategic insight about the business shifting from an acquisition to a retention model. Revised budget model based on repeat customer trajectory. ### Use case 5: Vendor data validation **Situation**: A business analyst just uploaded vendor-supplied inventory data and wants to validate before investing time in pipeline development. **Workflow**: 1. Opens inventory_raw View immediately after upload 2. Generates Key Insights before building transformations 3. AI surfaces critical risk patterns: - "A single SKU holds 12,500 units while most products sit at 125 creating severe inventory concentration risk" - "Expiry dates fall into only 2 distinct windows meaning a mass write-off event could hit with almost no warning" - "Last stock updates span 1,036 days with only 13 distinct dates leaving most SKUs with unknown freshness" 4. Contacts vendor with specific concerns before building any pipeline **Outcome**: Critical inventory risks identified before a single pipeline task was built. ![List of five key insights about inventory, such as one SKU holding 12,500 units](https://mammoth.io/docs/images/20260421_175249_Usecase5-viewinsights1.webp) ## Best practices ### Before generating insights **Prepare the View first.** Insights describe the View's data after its pipeline. To focus on a subset (such as Q4 data only), add a Conditional Filter task to the pipeline before generating. Filters applied in Explore Cards do not change insights. **Run the Data Quality Report first.** Use both tools together—Data Quality Report identifies issues to fix, View Insights reveals business patterns to explore. **Review Explore Cards.** Understanding basic distributions helps you interpret AI insights with proper context. ### While reviewing insights **Look for the unexpected.** AI often surfaces patterns that humans miss in manual analysis. Pay attention to surprising correlations or concentrations. **Cross-reference with business knowledge.** AI detects statistical patterns but lacks your business context. Some insights may not be relevant to your specific situation. **Note specific numbers.** The AI provides exact values and comparisons suitable for stakeholder communication—copy these directly for presentations. ### After reviewing insights **Document surprising patterns.** Share unexpected insights with domain experts who can provide business context for statistical observations. **Prioritize further investigation.** Use insights to decide which areas warrant deeper analysis with Explore Cards or the Metrics panel. **Create dashboard KPIs.** Convert significant patterns into ongoing monitoring through dashboard creation. > **Tip**: Generate insights both before and after major pipeline changes. The "before" insights help prioritize which tasks to build. The "after" insights show whether the tasks changed the business patterns as intended. ## Common questions ### "Why do I need to click a button? why isn't it automatic?" The manual trigger gives you control over analysis timing and prevents unnecessary processing. You choose when to run the analysis based on your workflow—after data changes, before stakeholder meetings, or when exploring new datasets. ### "The button shows a different number each time—is that normal?" Yes. The button initially reads "View Insights" before any insights have been generated. After you click it and the AI completes analysis, the label updates to show the actual count for that session—for example, "6 Key Insights" or "7 Key Insights." The number reflects what the AI found in your data and cannot be set manually. It can differ between generations on the same dataset. ### "Can I customize which insights appear?" No. The AI determines which patterns are statistically significant, so you can't choose which insights appear. ### "What if I disagree with an insight?" That's expected. You bring business context that the AI lacks. Some insights might not be relevant to your specific situation, but they still represent valid statistical patterns. Use your expertise to determine which insights warrant action. ### "How do I save insights for later reference?" Only the latest set of insights is kept. If you need to keep insights for comparison or documentation, copy the text or take a screenshot before regenerating. Each new generation replaces the previous set. ### "Can insights analyze data from multiple Views?" No, insights analyze only the current View after all pipeline transformations are applied. If you need patterns across multiple datasets, combine the data in a single View first, or generate insights separately for each View and compare them manually. ## Troubleshooting ### Insights take a long time **Problem**: Generation seems stuck or takes much longer than expected. **Solutions**: - Check your internet connection stability - Refresh the browser and try again. If generation fails, Mammoth shows an error message and the button returns to "View Insights" - Verify the View contains data (empty Views cannot generate insights) ### Insights seem irrelevant or obvious **Problem**: AI observations don't provide value for your use case. **Solutions**: - AI lacks business context—some patterns may not be actionable in your situation - Add a Conditional Filter task to focus on a specific subset before generating - Combine insights with the Data Quality Report - Use insights as starting points for deeper investigation, not final answers ### No insights generated **Problem**: AI returns fewer insights than expected or the list shows "No data to show". **Solutions**: - Ensure the View contains sufficient data variation (very uniform data has fewer detectable patterns) - Check that columns contain meaningful business data, not just IDs or constants - Verify data has fully loaded before generating - Try regenerating—occasional processing issues can be resolved with a second attempt ### Insights don't reflect pipeline changes **Problem**: Insights still reflect old data after adding or running transformation tasks. **Solutions**: - This is expected behavior—insights do not auto-update when the pipeline changes - Click the Key Insights button again to analyze the transformed data - Wait for pipeline tasks to finish executing before regenerating --- # When to use each discovery tool URL: https://mammoth.io/docs/learn/explore-discover/when-to-use-each/ · Updated: 2026-11-02 Choose between Explore Cards, View Insights, the Data Quality Report and the Metrics panel based on your goal, with workflows for combining them. Mammoth has four discovery tools, each suited to a different analysis need. Use this page to pick one for your goal, or start with [Quick decision framework](#quick-decision-framework). View Insights and the Data Quality Report appear only when they are enabled for your workspace. Both are unavailable in preview mode, in edit mode and in a view-only workspace. The four discovery tools: - **Explore Cards**: Visual column profiling and interactive filtering - **View Insights**: AI-generated business observations - **Data Quality Report**: Quality assessment with recommended pipeline tasks - **Metrics panel**: Custom calculations and KPI tracking ![View interface with the Explore toggle and Explore Cards panel, the 5 Key Insights button, the Metrics panel with a Sum of quantity metric, and the Data Quality Score footer](https://mammoth.io/docs/images/20261009_195655_DiscoveryToolsOverview.webp) ## Quick decision framework ### When you need a quick answer **Use Explore Cards** for immediate data understanding: - First look at any new dataset - Quick value distribution checks - Interactive filtering and segmentation - Testing business logic before automation **Use Metrics panel** for quick calculations: - Specific KPIs or custom formulas - Metric monitoring as you filter - Dashboard preparation - Quick aggregations (sum, average, count) ### When you need more depth **Use View Insights** for pattern discovery: - Executive briefings and presentations - Finding unexpected trends - Business intelligence for stakeholders - "What should I know about this data?" **Use Data Quality Report** for comprehensive validation: - Pre-production quality gates - Compliance and audit requirements - Pipeline planning (identify issues first) - Systematic quality improvement ![Decision tree: Quick Look, Find Patterns, Check Quality and Calculate KPIs lead to four different tools](https://mammoth.io/docs/images/20260407_120504_Decisiontreeflowchart.webp) ## Tool-by-tool guidance ### Explore Cards **What it does**: Shows a visual card for each column you add to the Explore panel, with value distributions, statistics, and patterns. The display format depends on column type: text columns default to a ranked list of distinct values with counts and percentages, and can switch to a donut or treemap; numeric columns default to a vertical bar chart with range grouping; date columns default to a vertical bar chart and can switch to a timeline. Numeric and date cards can also be shown as a list. **Best for**: - Understanding data structure at first glance - Identifying outliers and unusual patterns - Creating filters through point-and-click interaction - Validating data expectations ("Does this look right?") **When to use**: - New dataset arrives and you need quick orientation - Filtering data for specific analysis segments - Checking column distributions before transformations - Converting discoveries into pipeline tasks **When NOT to use**: - You need AI-generated business insights - Comprehensive quality scoring is required - Custom calculations beyond basic statistics are needed ![Explore panel showing a text card, a numeric card and a date card](https://mammoth.io/docs/images/20261009_193601_ExploreCardsPanel.webp) **Example scenario**: "I just uploaded sales data and want to understand the geography distribution before building regional reports." > **Tip**: Double-click any value in Explore Cards to instantly filter your data. The filter badge beside the Explore toggle counts your active filters, and you can later convert them to a permanent pipeline task. ### View Insights **What it does**: AI analyzes your current View's data and generates between 3 and 7 business observations about patterns, trends, and anomalies. The button label reflects the actual count generated—you may see "5 Key Insights", "7 Key Insights", or another number depending on the data. The AI determines the count; you cannot specify it. You open View Insights from the button on the right side of the action bar above the grid; before the first run it reads **View Insights**. > **Important**: View Insights analyzes the current View only. It does not analyze other Views or Datasets within your Project. The AI identifies patterns and surfaces business-relevant observations—for example, flagging revenue concentration risk, inconsistent data formatting blocking joins, or churn clusters suggesting a cohort-level event. Insights combine factual pattern identification with business context to help you understand what the data means, not just what it contains. Results are not updated automatically when data changes; when the View's data changes, the saved insights are cleared and you click the button again to regenerate. **Best for**: - Executive summaries and stakeholder communication - Discovering unexpected patterns you might miss - Preparing talking points for presentations - Getting an AI perspective on business implications **When to use**: - Preparing briefings for management or clients - You don't know what questions to ask about new data - You need business context for technical findings - You want a second perspective on data patterns **When NOT to use**: - You need specific quality metrics or scores - Interactive exploration is more important - You want technical validation, not business observations **Current limitations**: - No follow-up questions: You cannot ask the AI to elaborate on a specific insight after generation - No export option: the insights panel has no export button, so copy the text manually - No cross-View analysis: Scope is limited to the current View ![View Insights panel under the 7 Key Insights button, listing seven insights about customer revenue and churn](https://mammoth.io/docs/images/20260407_120539_KeyInsightspanel1.webp) **Example scenario**: "I need to present quarterly results to the board and want AI to highlight the most important trends." > **Tip**: Copy View Insights output for stakeholder communication. The AI-generated observations work as talking points for presentations. ### Data Quality Report **What it does**: Systematic 6-dimension quality assessment using the DAMA (Data Management Association) framework, generating scores and pipeline task recommendations. The report covers the current View only—it does not compare quality across multiple Views or Datasets. The report identifies issues and recommends specific pipeline tasks to address them—for example, Remove Duplicate Rows, Conditional Filter, Text Formatting, or Math Function—with **High Priority**, **Medium**, or **Low** labels. You open it from the button in the status footer below the grid (**View Data Quality**, which then shows the score). **View Details** opens the full report. You then build those tasks manually in the pipeline. There is no one-click apply button; the recommendations are guidance, not automated fixes. **Best for**: - Pre-production data validation - Compliance and audit trail documentation - Systematic quality improvement workflows - Understanding data readiness for analysis **When to use**: - Before building production pipelines - Compliance reporting requirements - Data contains critical quality issues to address - You need documented quality metrics for stakeholders **When NOT to use**: - Quick data exploration is the priority - Quality issues are already known and accepted - You need business insights, not technical validation **Current limitations**: - No export of the report—screenshot or copy/paste only - Snapshot analysis only: not continuous monitoring - Scope limited to current View—cannot compare quality across multiple datasets - Cannot define custom quality dimensions beyond the DAMA framework ![Data Quality dialog Recommended Actions section listing Edit Cells and three Fill Missing Values cards with High Priority and Medium labels](https://mammoth.io/docs/images/20261009_195602_DataQualityRecommended.webp) **Example scenario**: "This data feeds our financial reporting dashboard. I need to validate quality before publishing to executives." > **Tip**: Run the Data Quality Report immediately after connecting new data sources. Address critical issues before investing time in pipeline development. ### Metrics panel **What it does**: Create custom metrics, KPIs, and calculations that update with the current View and your explore filters, unless you lock a metric to keep its value fixed while you explore. The Metrics panel produces numeric calculations—it contributes to dashboard preparation but does not itself create dashboards. **Best for**: - Specific business metrics and KPIs - Dashboard preparation and metric definition - Custom formulas beyond basic statistics - Real-time monitoring of key values **When to use**: - Building dashboards and you need specific metrics defined first - Monitoring business KPIs as you filter - Custom calculations required (ratios and percentages) - Comparing multiple aggregation methods **When NOT to use**: - Basic column statistics are sufficient (use Explore Cards instead) - You need comprehensive data profiling - Quality validation is the primary concern ![Metrics panel with three metrics: Sum of Price, Sum of Tax filtered by Department, and Minimum Quantity](https://mammoth.io/docs/images/20260407_120648_metric_panel1.webp) **Example scenario**: "I'm building a sales dashboard and need to track conversion rates, average deal size, and quota attainment." ## Comprehensive tool comparison | Tool | Output type | Interactivity | Actionable results | | --- | --- | --- | --- | | **Explore Cards** | Text: ranked list (or donut, treemap). Numeric/Date: vertical bar chart (or list; timeline for dates) | High (filtering) | Filter-to-pipeline | | **View Insights** | Text observations (3–7) | None | Informational only | | **Data Quality Report** | Scores + recommendations | Low (read-only) | Manual pipeline task creation | | **Metrics panel** | Numeric values | High (formulas) | KPI calculations / dashboard preparation | ### Strengths and limitations **Explore Cards**: - Quick data profiling - Interactive filtering - Convert filters to pipeline tasks - No business context generated - Limited to the card statistics (Sum, Min, St.Dev, Avg, Max for numeric; Earliest and Latest for dates) **View Insights**: - Business intelligence focus - Finds unexpected patterns - Not interactive—no follow-up questions possible - No export button (copy the text manually) - Current View scope only **Data Quality Report**: - Comprehensive quality coverage across 6 DAMA dimensions - Industry standard framework - Prioritized pipeline task recommendations (High / Medium / Low) - Read-only report—no one-click fix buttons; recommended tasks must be built manually in the pipeline - No export of the report - Current View scope only **Metrics panel**: - Custom calculations and formulas - Updates with your explore filters, unless a metric is locked - Supports dashboard preparation - Requires formula knowledge for advanced use - Manual setup required for each metric ![Comparison of the four discovery tools by analysis time, output type, interactivity and actionable result](https://mammoth.io/docs/images/20260408_101547_Side-by-sidecomparison.webp) ## Workflow integration patterns ### Pattern 1: New dataset analysis Recommended sequence: 1. **Explore Cards**: Understand structure and distributions 2. **Data Quality Report**: Validate data readiness 3. **View Insights**: Discover business patterns 4. **Metrics panel** (as needed): Define specific KPIs 5. **Pipeline development**: convert discoveries into pipeline tasks ### Pattern 2: Executive briefing preparation Recommended sequence: 1. **View Insights**: Get AI perspective on trends 2. **Metrics panel**: Calculate specific KPIs for presentation 3. **Explore Cards**: Validate insights with visual confirmation 4. **Dashboard creation**: convert metrics to visual presentation ### Pattern 3: Production pipeline development Recommended sequence: 1. **Data Quality Report**: Identify issues requiring fixes 2. **Explore Cards**: Understand data structure for transformations 3. **Pipeline Development**: Build transformations addressing quality issues 4. **Metrics panel** (optional): Define success metrics for monitoring 5. **Validation**: Re-run tools to confirm improvements ![Three tool sequences, New Dataset Analysis, Executive Briefing and Pipeline Development, with estimated total times](https://mammoth.io/docs/images/20260407_155834_Workflowsequencediagram.webp) ## Real-world use cases ### Financial services: Monthly regulatory reporting **Challenge**: Validate transaction data quality before SOX reporting Solution: 1. **Data Quality Report**: Ensure completeness and accuracy meet audit requirements 2. **Explore Cards**: Check for unusual transaction patterns or outliers 3. **Metrics panel**: Calculate key financial ratios for validation 4. **View Insights**: Generate executive summary for compliance team **Outcome**: Complete quality validation and executive briefing from one View ### Manufacturing: Production line analysis **Challenge**: Investigate quality issues affecting production yield Solution: 1. **Explore Cards**: Examine defect rate distributions by product line 2. **View Insights**: Let AI surface patterns worth investigating 3. **Metrics panel**: Calculate yield percentages and quality scores 4. **Data Quality Report**: Ensure sensor data integrity for accurate analysis **Outcome**: Root cause identified and quality metrics established for monitoring ### Hospitality: Revenue management **Challenge**: Optimize pricing strategy based on booking patterns Solution: 1. **View Insights**: Discover seasonal patterns and demand correlations 2. **Explore Cards**: Filter by peak/off-peak periods for detailed analysis 3. **Metrics panel**: Calculate occupancy rates, RevPAR, and ADR metrics 4. **Data Quality Report**: Validate booking data completeness for accurate forecasting **Outcome**: Data-driven pricing strategy with validated performance metrics [Video: Watch on YouTube](https://www.youtube.com/watch?v=H1VHK7FcS3c) ## Common decision scenarios ### "I have 10 minutes to understand this dataset" Recommended approach: - Start with **Explore Cards**: Visual overview - Run **View Insights**: AI analysis - Quick **Metrics panel** setup: Key numbers - **Data Quality Report**: Quality validation - Remaining time: Plan next steps based on findings ### "My boss needs insights for tomorrow's meeting" Recommended approach: - **View Insights** first: Business-ready observations - **Metrics panel**: Specific numbers to support key points - **Explore Cards**: Visual validation if questions arise - Skip **Data Quality Report** unless data quality is a meeting topic ### "This data feeds our production dashboard" Recommended approach: - **Data Quality Report** recommended: Production benefits from validated data - **Explore Cards**: Understand distributions for threshold setting - **Metrics panel**: Define dashboard KPIs precisely - **View Insights** optional: Unless stakeholder communication is needed ### "I'm not sure what questions to ask about this data" Recommended approach: - **View Insights** first: AI suggests patterns to investigate - **Explore Cards**: Visual exploration based on AI suggestions - **Data Quality Report**: Understand data limitations - **Metrics panel**: Calculate interesting ratios discovered during exploration ![Four scenario flows with ordered tool sequences, from 10-Minute Analysis to Unknown Questions](https://mammoth.io/docs/images/20260407_155808_Decisionscenarioflowchart.webp) ## Advanced integration techniques ### Combining tools for comprehensive analysis Triangulation approach: Use multiple tools to validate findings: - AI suggests pattern in **View Insights** - Visually confirm pattern in **Explore Cards** - Quantify pattern with **Metrics panel** - Validate data quality in **Data Quality Report** Progressive refinement: Start broad, get specific: - **View Insights**: "Revenue grew 23% in Q3" - **Explore Cards**: Filter to Q3 data for detailed analysis - **Metrics panel**: Calculate month-over-month growth rates - **Data Quality Report**: Ensure revenue data completeness ### Tool output integration From discovery to action: - **Explore Cards** filters → Convert to Pipeline Conditional Filter tasks - **Explore Cards** → Add a card's chart to a dashboard from its **More options** menu (**Add to dashboard…**) - **Data Quality Report** recommendations → Build the suggested tasks in the pipeline - **View Insights** patterns → Research further with Explore Cards - **Metrics panel** calculations → Feed into dashboards ## How each tool refreshes **Explore Cards and Metrics panel**: Update as you filter and as the View's data changes. **View Insights and Data Quality Report**: Require you to click the button. A saved result is cleared when the View's data changes, and a new one reflects the data at the moment you click. ## Troubleshooting common issues ### Tool selection problems Problem: "I used View Insights but need specific numbers" Solution: View Insights provides business observations, not calculations. Use the Metrics panel for specific numbers and KPIs. Problem: "The button showed '5 Key Insights' but I only got 3" Solution: The button label reflects the count at the time of generation—it is dynamic, not fixed. The AI generates between 3 and 7 insights based on data complexity and significant patterns found. The count cannot be set by the user and may differ across sessions on the same dataset. Problem: "Data Quality Report found issues but I need quick insights" Solution: Address critical quality issues first by building the recommended pipeline tasks, then run View Insights on the cleaned data for reliable patterns. Problem: "Explore Cards don't show patterns I expected" Solution: Check your active explore filters—a card to the right of a filtered card shows only the filtered rows (its header notes this). Use **Clear filters** to see full distributions, and check that you have added the columns you want to explore. ### Workflow timing issues Problem: "Don't have time to run all tools" Solution: Prioritize based on your goal: - Quick overview: Explore Cards only - Executive briefing: View Insights and Metrics panel - Production validation: Data Quality Report - Comprehensive analysis: All tools in sequence Problem: "Tools give conflicting information" Solution: Check data scope. Explore Cards and Metrics reflect your active explore filters. View Insights and Data Quality Report both analyze the current View after all pipeline transformations are applied, and explore filters do not change them. To compare equivalent data states, clear the explore filters, or add a Conditional Filter task to the pipeline if you want View Insights or the Data Quality Report to analyze a subset. ## Next steps After using discovery tools to understand your data: 1. **Convert discoveries into pipeline tasks**: use filter-to-pipeline conversion so the logic repeats on every refresh 2. **Build dashboards**: Use Metrics panel calculations as the foundation for dashboard components 3. **Create documentation**: Use View Insights output for dataset documentation 4. **Establish quality gates**: Use Data Quality Report scores as pipeline validation checkpoints 5. **Share insights**: Copy or screenshot findings for stakeholder communication Start with the tool that matches your immediate need, then add the others as needed. --- # Download options URL: https://mammoth.io/docs/learn/export-share/download-options/ · Updated: 2026-11-02 Download a Mammoth View as CSV or XLSX, or save it as a new Mammoth Dataset; includes the 50,000-row XLSX limit and download troubleshooting. The download button (⬇) in the View toolbar saves a snapshot of your current View data to your computer. It is separate from the **Export** button—downloads are one-time files, not persistent pipeline connections. ![Download menu headed Save file as with CSV, XLSX and Mammoth Dataset options](https://mammoth.io/docs/images/20261009_003714_Download-menu-save-file-as.webp) Click the ⬇ button to open the **Save file as...** menu, select **CSV**, **XLSX** or **Mammoth Dataset**, and click **Confirm**. The download button is disabled in edit mode and in a view-only workspace. Mammoth names CSV and XLSX files automatically, from the first 10 characters of the Dataset name, the first 10 of the View name and a random suffix. There's no file-name field for these formats; rename the file after it downloads. ### What the file contains - **Hidden columns are left out.** The menu shows a note such as "2 hidden columns excluded". - **Column order, renames, sort order and formats** from the View are applied. - **Filtered rows.** If the grid is filtered, the menu shows "Filtered: X of Y rows" and downloads only the filtered rows. Tick **Save all** to include every row instead. CSV and XLSX downloads depend on your plan. If your plan doesn't include them, **Confirm** is blocked. ## Available formats ### CSV A plain-text file with values separated by commas. Every database, spreadsheet tool, and data processing library can read it. **Choose CSV when:** - You're importing data into another system or database - The file will be processed by a script (Python, R, etc.) - The dataset is large and you need the smallest file size - You need maximum compatibility with external tools No row limit for CSV downloads. ### XLSX A formatted Excel workbook. Data types are preserved—dates remain dates, numbers remain numbers. **Choose XLSX when:** - The recipient will work with the file in Microsoft Excel - You need formatted output for a report or presentation - Data types matter (especially dates and currency values) - You're sharing with non-technical stakeholders **Row limit: 50,000 rows.** For larger datasets, download as CSV instead. See [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/). ### Mammoth dataset Not a file download. Selecting **Mammoth Dataset** reveals a required **File name** field; **Confirm** stays disabled until you enter one. Confirming saves the View's current data once as a Dataset in your workspace's Data Library. It is a one-time save. It doesn't create a pipeline task, doesn't include hidden columns, and offers no filter or column mapping. For a Dataset that refreshes on every pipeline run, use **Export → Send to Dataset** instead (see [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/#send-to-dataset)). **Choose Mammoth Dataset when:** - You want to save the View's current output as a new Dataset to build on further, without setting up a recurring pipeline export ## Download vs. export Downloads are static—they capture data at the moment you click Confirm. If your data changes, you need to download again and re-share the file. If stakeholders need data that updates automatically without re-downloading, use the **Export → Live link** option instead. The URL stays the same and always returns the latest pipeline output. | | Download | Live link | | --- | --- | --- | | Data freshness | Snapshot at download time | Always current | | How it's shared | File | URL | | Updates automatically | No | Yes | | Works offline | Yes | No | ## Troubleshooting ### Download doesn't start **Cause:** The browser is blocking downloads from this site. **Fix:** Allow downloads from this site in your browser settings, or try a different browser. ### XLSX file won't open **Cause:** The Excel version is older than Excel 2007 and can't read the .xlsx format. **Fix:** Use Microsoft Excel 2007 or later, or download as CSV. ### "XLSX download is not available for views over 50,000 rows" **Cause:** The View has more rows than the XLSX row limit. The count applies to the rows being downloaded, so filtering the grid first can bring it under the limit. The download fails rather than producing a truncated file. **Fix:** Download as CSV instead, which has no row limit. --- # Export formats URL: https://mammoth.io/docs/learn/export-share/export-formats/ · Updated: 2026-11-02 Compare the CSV, XLSX, and Mammoth Dataset options in the Download dialog, including the 50,000-row XLSX limit. When you click the download (⬇) button in Mammoth, you can save the View as a **CSV** or **XLSX** file, or use the **Mammoth Dataset** option to save it as a new Dataset instead of a file. Each is designed for a different downstream use. ## Quick decision guide | I need to... | Use | | --- | --- | | Import into a database or run a script | CSV | | Open in Excel for analysis or reporting | XLSX | | Save the View's output as a new Dataset to keep working on | Mammoth Dataset | | Export more than 50,000 rows | CSV | | Share a formatted report with stakeholders | XLSX | ## CSV A plain-text file—one row per line, values separated by commas. No formatting, no data type metadata. Every tool that handles data can read a CSV. **Strengths:** - No row limit—works for any dataset size - Smallest file size - Compatible with every database, ETL tool, and programming language **Limitations:** - Dates and numbers are stored as plain text (no type information) - No formatting (no column widths or styling) ## XLSX (Excel workbook) A formatted Excel file with data type preservation. Dates stay as Excel dates (sortable and filterable), numbers stay as numbers. **Strengths:** - Data types preserved—dates, numbers, percentages work correctly in Excel - Opens directly in Excel **Limitations:** - **50,000 row limit** (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)). Downloads exceeding this limit fail outright with an error ("XLSX download is not available for views over 50,000 rows") rather than producing a truncated file. Use CSV for larger datasets. - Larger file size than CSV \ For datasets you'll share with business stakeholders in Excel, XLSX keeps data types intact. For anything over 50,000 rows, always use CSV. ## Mammoth dataset Not actually a file format—this option doesn't produce a downloadable file. After you enter a **File name**, it saves the View's current data once as a Dataset in your workspace's Data Library. Unlike **Export → Send to Dataset**, it creates no pipeline task, so the Dataset isn't refreshed on later runs. **Use this when:** - You want to save the View's current output as a new Dataset to keep working on, without downloading a file or setting up a recurring pipeline export For a Dataset that updates after every pipeline run, see [Send to Dataset](https://mammoth.io/docs/learn/export-share/send-to-destinations/#send-to-dataset). --- ## What every download contains Hidden columns are excluded, and the View's column order, renames, sort order and formats are applied. If the grid is filtered, only the filtered rows download unless you tick **Save all**. Mammoth names the file automatically; there's no file-name field for CSV or XLSX. ## Format comparison | | CSV | XLSX | | --- | --- | --- | | Row limit | None | 50,000 (export fails above this) | | Data types preserved | No | Yes | | Opens in Excel | Yes | Yes (native) | | Best for | Systems, scripts, large data | Stakeholder reports | --- # Export & share URL: https://mammoth.io/docs/learn/export-share/ · Updated: 2026-11-02 Overview of exporting and sharing Mammoth data: Download files, Export to destinations and Live links, and Publish as a dashboard. Once you've transformed your data in Mammoth, three controls in the View toolbar get it to the people and systems that need it. This section is for analysts and administrators who share data; start with the table in [Which option should I use?](#which-option-should-i-use) to pick one. ## Three toolbar actions ### Download button The download icon (⬇) saves a one-time snapshot of the current View to your computer as **CSV** or **XLSX**. Static: reflects data at the moment you click. Use for ad-hoc analysis, offline reporting, or one-time file sharing. The third option in the dialog, **Mammoth Dataset**, doesn't download a file. It does a one-time save of the View's current data as a Dataset in your workspace. Unlike Export → Send to Dataset, it creates no pipeline task, so it doesn't refresh when the pipeline runs. Downloads are disabled while you're in edit mode or in a view-only workspace. → [Download options](https://mammoth.io/docs/learn/export-share/download-options/) · [Export formats](https://mammoth.io/docs/learn/export-share/export-formats/) --- ### Export button Creates a persistent pipeline task that delivers data automatically every time your pipeline runs. The **Export** menu has two tabs: **Mammoth Managed**—Mammoth provisions everything, no credentials needed: - **Send to Dataset**—push results into another Dataset, including one in a different Project - **Live link**—persistent URL that always serves current data as CSV - **Google BigQuery** or **PostgreSQL**—Mammoth provisions a managed instance and hands you the connection credentials **External Destinations**—connect to your own infrastructure: - Google BigQuery, PostgreSQL, MySQL, SQL Server, Amazon Redshift, Elasticsearch, SFTP, SharePoint, Azure Blob Storage, OneDrive, Tableau Server/Cloud, REST API Which destinations you can use depends on your plan. A destination your plan doesn't include shows a plan label on its card in the Export menu. See [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/#plan-availability). → [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/) · [Live links](https://mammoth.io/docs/learn/export-share/live-links/) --- ### Publish button Opens the create page, where you build a dashboard, presentation, document or Q&A from your View data, then share it by link. → [Publish as Dashboard](https://mammoth.io/docs/learn/export-share/published-views/) ## In this section - [Download options](https://mammoth.io/docs/learn/export-share/download-options/)—Save a View as CSV, XLSX, or a Mammoth Dataset - [Export formats](https://mammoth.io/docs/learn/export-share/export-formats/)—Compare the download formats - [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/)—Deliver data to databases, files, and apps after each pipeline run - [Live links](https://mammoth.io/docs/learn/export-share/live-links/)—Serve current data as a CSV at a fixed URL - [Publish as Dashboard](https://mammoth.io/docs/learn/export-share/published-views/)—Build a shareable AI dashboard from a View ## Which option should I use? | Situation | Best option | | --- | --- | | Someone needs the data once, in a spreadsheet | Download → XLSX | | Analyst needs raw data to process in a script | Download → CSV | | BI tool needs to query Mammoth data via URL | Export → Live link | | Tableau or Power BI needs automatic data delivery | Export → a managed or external database, or Tableau Server/Cloud | | Stakeholders need a visual dashboard via link | Publish → Publish as Dashboard | | Push results into another Mammoth Dataset | Export → Send to Dataset | ## Auto-sync Every destination export (and the Live Link task) has an **Auto-sync** setting. The task card shows whether it is ON or OFF; you change it from the task's options menu. When on (the default), data is delivered automatically each time the pipeline runs. When off, data is held until you release it manually—which gives you a review gate before delivery. The **Monitor** panel (left sidebar) lists everything waiting on you under its **Needs Attention** tab, including **Errors**, **Governance** (checkpoint approvals and failed data checks), **Pending** (data held back by Auto-sync, released with **Process** for a batch held by an incoming link, or **Update** for a pending destination update) and **Pending Retentions**. A **Paused** tab lists every task you've intentionally left with Auto-sync off. A badge on the Monitor icon shows the count of items needing attention. → [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/) for full Auto-sync details. --- # Live links URL: https://mammoth.io/docs/learn/export-share/live-links/ · Updated: 2026-11-02 Create a Live Link, a persistent CSV URL that serves a View's latest data after each pipeline run, and connect it to Tableau, Power BI, or Excel. A Live Link is a persistent URL tied to a Mammoth View. When your pipeline runs and produces updated results, the URL automatically serves the new data. The URL never changes—BI tools, dashboards, and scripts pointing at it always receive the latest output. Live Links always deliver data as **CSV**. ## How live links work When you create a Live Link, Mammoth: 1. Generates a unique, persistent URL of the View 2. Adds a **Live link** task pinned to the end of your pipeline 3. After each pipeline execution, uploads the current View output to that URL 4. The URL immediately serves the updated CSV The filename follows the pattern `{dataset_name}_{view_name}_{unique_id}.csv`, served from a Mammoth-hosted URL. The dataset and View names are converted to lowercase and cut to their first 10 characters. The `{unique_id}` is 32 random letters and digits generated by Mammoth, so the URL isn't predictable or user-chosen. The file contains the View as it is shown: hidden columns are not included. Live links depend on your plan. If yours doesn't include them, the **Live link** card in the Export menu shows a plan label. ## Creating a live link 1. Open the View you want to share. 2. Click the **Export** button in the toolbar. 3. On the **Mammoth Managed** tab, select **Live link**. 4. The Live link form opens in the pipeline panel. It has no fields, only an information callout. Click **Apply**. Mammoth creates the Live Link and pins it as a task at the end of your pipeline. The export runs when you apply it. In the pipeline panel you'll see the task with a **Copy** link to get the URL. ![Export menu with the Live link card and the Live link form in the pipeline panel](https://mammoth.io/docs/images/20261009_003608_Export-live-link-card-and-form.webp) Click **Copy** to copy the URL to your clipboard. Only one Live Link can exist per View. If the Live link option appears disabled in the Export menu, a Live Link already exists for this View. Find it in the pipeline panel under "Tasks pinned to the end." ![Pipeline panel with a Live link task pinned to the end, showing Live Link generated, Copy and Auto-sync ON](https://mammoth.io/docs/images/20261009_004529_Pipeline-pinned-live-link-task.webp) ## Auto-sync The Live Link task has an **Auto-sync** setting. The task card shows ON or OFF, and you change it from the task's options menu in the pipeline panel. - **Auto-sync ON** (default)—the URL is refreshed automatically every time the pipeline executes. Anyone accessing the URL immediately gets the new data. - **Auto-sync OFF**—the pipeline runs but the URL is not updated. The previous data continues to be served until you manually release the update from the Monitor panel's Needs Attention tab. Turn Auto-sync OFF when you need to review pipeline output before it becomes publicly accessible via the Live Link URL—for example, before a scheduled stakeholder report window. You can keep Auto-sync ON for a Live Link while keeping it OFF on a database destination from the same View. Each export destination is controlled independently—different audiences can receive data on different schedules. ## Connecting to BI tools Live Links deliver a CSV file over HTTPS. Most BI tools can connect to a CSV URL directly. **Tableau**—Connect to the Live Link URL via the Web Data Connector or by using the URL as a text file source. Set a scheduled extract refresh to pull updated data on your desired cadence. **Power BI**—Use **Get Data → Web** and enter the Live Link URL. Power BI fetches the CSV and loads it as a table. Publish to the Power BI Service and configure a scheduled refresh. **Excel**—Use **Data → From Web** and enter the Live Link URL. Excel fetches the latest CSV each time you refresh the connection. For large datasets, schedule BI tool refreshes rather than using live connections—this avoids timeout issues on very large Views. ## Sharing the URL The Live Link URL is a plain HTTPS address that returns a CSV file. You can: - Paste it into a BI tool's data source configuration - Use it in a script with a standard HTTP request - Share it directly with someone who needs to download the latest data The URL does not require authentication by default. Treat it like a shared link—anyone who has it can access the data. If your data is sensitive, consider using a destination export with access controls instead. ## Troubleshooting ### Live link option is greyed out in the Export menu **Cause:** A Live Link already exists for this View. Only one Live Link is allowed per View. **Fix:** Find the existing Live Link in the pipeline panel under "Tasks pinned to the end." ### URL returns old data **Cause:** The pipeline has not run recently, or Auto-sync is OFF for the Live Link task. **Fix:** Check that the pipeline has executed recently and that Auto-sync is ON for the Live Link task. Open the pipeline panel and verify the task shows the current row count. ### URL is not accessible **Cause:** The Live Link export may not have finished its first run yet, or the Live link task failed. **Fix:** Wait for the task to finish, check the Monitor panel's **Needs Attention** tab for errors, then try the URL again. --- # Publish URL: https://mammoth.io/docs/learn/export-share/published-views/ · Updated: 2026-11-02 Use the Publish button to open the create page and build a dashboard, presentation, document or Q&A from a View, then share it and control how it updates. The **Publish** button in the View toolbar starts building a shareable dashboard, presentation, document or Q&A from your View data—no separate BI tool or file distribution needed. ## Create from a View The **Publish** button doesn't open a dialog. It takes you to a create page for the current View. ![Create page opened from Publish, with the Dashboard, Slides, Doc and Q&A format cards, dashboard ideas and the describe prompt](https://mammoth.io/docs/images/20261009_004349_Publish-create-page-from-view.webp) ### Creating from the Publish button 1. Open the View you want to share. 2. Click **Publish** in the View toolbar. The create page opens, headed **What do you want to build?**, with the name of your View and a **Change** link to pick another View. 3. Choose a format card: **Dashboard**, **Slides**, **Doc** or **Q&A**. 4. Pick one of the suggested ideas, or type what you want in the **...or describe the dashboard you want** field and send it. Be specific about the charts, metrics and groupings you want. 5. Mammoth opens the editor with what it built. Review it, then publish and copy the link. ### Sharing, access and updates Publishing, the **Sign-in required** and **Anyone with the link** access types, row-level security, invitations, **Sync settings**, **Download PDF**, **Share as video** and **Unpublish** are covered in [Share a dashboard](https://mammoth.io/docs/learn/dashboard/share-dashboard/). The number of dashboards you can publish and the availability of row-level security depend on your plan. ## Publish vs. other export options | | Publish Dashboard | Download | Live Link | | --- | --- | --- | --- | | Format | Visual dashboard | CSV / XLSX file | CSV via URL | | Recipient access | Via link | File download | URL | | Updates automatically | Only if the dashboard's sync settings are on (see [Share a dashboard](https://mammoth.io/docs/learn/dashboard/share-dashboard/)) | No | Yes | | Requires Mammoth account | Only with Sign-in required | No | No | | Best for | Visual stakeholder sharing | Ad-hoc analysis | BI tool integration | ## Tips for better dashboards **Be specific in your description.** Instead of "show sales data," try "show total revenue by product category for the last 90 days, sorted by revenue descending, as a bar chart." **Review before sharing.** Verify the visualizations match your intent before copying the share link. --- # Send to destinations URL: https://mammoth.io/docs/learn/export-share/send-to-destinations/ · Updated: 2026-11-02 Send a View to Mammoth managed or external destinations (databases, SFTP, SharePoint, Tableau, REST API) after every pipeline run, with Auto-sync controls. The **Export** button in the View toolbar connects your View to a destination that receives data automatically every time your pipeline runs. Once configured, the export becomes a task pinned to the end of your pipeline—no manual steps required. The Export menu, titled with the View's name, has two tabs. Clicking a card opens the export form in the pipeline panel, where a summary row with a pencil icon lets you switch to another category or connector. The form footer has **Apply** and a read-only **Position** and **Update method** line with a pencil to edit them. Exports run as soon as you apply them. | Tab | Who manages it | Use when | | --- | --- | --- | | **Mammoth Managed** | Mammoth provisions everything | You want zero infrastructure setup | | **External Destinations** | You provide credentials | You have your own database or server | ![Export menu, Mammoth Managed tab, with the Send to Dataset, Live link, Google BigQuery and PostgreSQL cards](https://mammoth.io/docs/images/20261009_003349_Export-menu-mammoth-managed.webp) ![Export menu, External Destinations tab, listing the available connectors](https://mammoth.io/docs/images/20261009_003354_Export-menu-external-destinations.webp) ## Plan availability What you can create depends on your plan. A card shows a plan label when your plan doesn't include that destination. Send to Dataset has no plan restriction. The free download options (CSV and XLSX) are covered in [Download options](https://mammoth.io/docs/learn/export-share/download-options/). Live links, file exports, database exports, the managed databases, Tableau and REST API Export are each included on specific plans only; check the label on the card or contact support to find out which plan includes the destination you need. A workspace that is over its managed-database limit gets an error when it creates a managed table. ## Mammoth managed destinations Mammoth provisions and maintains these—no external credentials or infrastructure needed. ### Send to Dataset Pushes the current View's output into another Dataset, which can be in a different Project. Use this to pass processed results downstream in a multi-stage pipeline. Unlike the **Mammoth Dataset** option in the Download dialog, this creates a persistent pipeline task that refreshes the Dataset on every run. **To configure:** 1. Click **Export** → **Send to Dataset**. 2. Choose **New Dataset** or **Existing Dataset**. - **New Dataset:** Enter a name and pick a **Location** (a folder, which can be in another Project). - **Existing Dataset:** Select a Dataset from the picker. 3. Click **Next**. 4. On the second step, set the options for what is sent: - A filter condition, to send only matching rows. - **Include hidden columns**, to send columns hidden in the grid. - The column list, which maps each column to the destination. For an existing Dataset, **Hide already-mapped columns** helps you find the ones still to map. - **Update method**: **Replace** or **Combine**. - **Keep at end**, to keep the task at the end of the pipeline. 5. Click **Apply**. Auto-sync for this task is switched from the step's options menu (see [Auto-sync](#auto-sync)). ![Send to Dataset form in the pipeline panel, steps 1 and 2](https://mammoth.io/docs/images/20261009_003551_Export-send-to-dataset-steps-1-and-2.webp) ### Live link Generates a persistent URL that always serves the current View's data. The URL never changes—downstream systems can point to it once and always receive fresh data after each pipeline run. **Characteristics:** - No configuration fields—Mammoth generates the link automatically, as CSV without hidden columns - One Live link per View - Included only on some plans (see [Plan availability](#plan-availability)) - The URL is displayed on the task card with a **Copy** button - Auto-sync controls whether the URL serves updated data after each pipeline run (default: ON) - Live Link is always pinned to the end of the pipeline See [Live links](https://mammoth.io/docs/learn/export-share/live-links/) for details. ### Google BigQuery / PostgreSQL (Mammoth managed) Mammoth provisions a fully managed **Google BigQuery** or **PostgreSQL** instance on demand—no credentials to configure, no infrastructure to manage. Each appears as its own card on the Mammoth Managed tab, alongside Send to Dataset and Live link. **To configure (same steps for both):** 1. Click **Export**, then click the **Google BigQuery** or **PostgreSQL** card under Mammoth Managed. 2. Enter the destination table name (auto-filled from your Dataset and View names). 3. Click **Next: Generate Table and Copy Credentials**. 4. Mammoth creates the table, showing progress messages as it works, then opens the **Database Credentials** dialog. 5. Use those credentials to connect your BI tool (Tableau, Power BI, Looker) directly: - **PostgreSQL**: host, port, username, password, database and table, with a **Copy all credentials** button. - **BigQuery**: the dataset and table, a **Service Account Email** to paste into tools such as Power BI, and a downloadable **Service Account JSON key** file. Keep the key secure. ![Mammoth Managed Google BigQuery export form with the table name field](https://mammoth.io/docs/images/20261009_003533_Export-form-mammoth-managed-bigquery.webp) The managed database table is replaced in full on each pipeline execution (drop and recreate). Managed databases have no Keep-at-end option. ## External destinations Connect Mammoth to your own infrastructure. You provide the credentials; Mammoth delivers the data after each pipeline run. Some external destination types depend on your plan; see [Plan availability](#plan-availability). **Supported destinations:** | Destination | Default port or credential type | Typical use | | --- | --- | --- | | Google BigQuery | (JSON key file) | Cloud analytics, Looker integration | | Elasticsearch | 9243 | Search index, operational dashboards | | SQL Server | 1433 | Microsoft ecosystem, Power BI | | MySQL | 3306 | Web application backend | | PostgreSQL | 5432 | General-purpose database, Tableau/Power BI | | Amazon Redshift | 5439 | AWS data warehouse | | SFTP | 22 | Scheduled file delivery to external servers | | SharePoint | (OAuth app) | Microsoft 365 file integration | | Azure Blob Storage | (Azure AD app) | Cloud file storage | | OneDrive | (Azure AD app) | Microsoft 365 file integration | | Tableau Server/Cloud | (Personal Access Token) | Publish directly as a Tableau data source | | REST API | (per endpoint) | Push data to any HTTP endpoint | The footer of the export form shows the task's **Position** (default: end of pipeline) and **Update method**. Click the pencil icon to change them. See [Additional options](#additional-options). ### Google BigQuery (external) BigQuery uses a JSON service account credentials file—not a username and password. **Configuration steps:** 1. Upload your BigQuery service account JSON file. If you have saved more than one connection, pick one from the **Connection** dropdown; an icon next to it deletes a saved connection. 2. Enter the **Table Name**. 3. Select your **Project Name** from the searchable dropdown (populated from your credentials)—each entry represents a project/dataset pair. 4. Choose the **Update method** in the form footer (see below). 5. If using **Merge**, select the **Reference Column(s)** used as merge keys. 6. Optionally enable **Partitioning** (requires a DATE column in the View). Mammoth also writes a reference table named `ref_` alongside the data table in the BigQuery dataset. **Update methods:** | Method | Label in UI | Behaviour | | --- | --- | --- | | Replace | Replace | Deletes all existing rows and inserts fresh data on each run | | Combine | Combine | Appends new rows to the existing table without modifying existing rows | | Merge | Merge | Updates rows matching the reference column(s); inserts rows with no match | When **Merge** is selected, you must also choose one or more **Reference columns**—these are the primary key columns used to match existing rows. **Partitioning** (available when the View contains DATE columns): - Tick the **Partitioning** checkbox and select a date column as the partition key. - Choose the partition granularity: **Day**, **Month**, or **Year**. - When editing an existing BigQuery export, the Partitioning checkbox is only enabled if the Update method is Replace. When creating a new export, Partitioning can be set up alongside Combine or Merge too. ![External Google BigQuery export form with Table Name, Project Name, partitioning and Replace, Combine or Merge update methods](https://mammoth.io/docs/images/20260422_170508_ExternaldestnationBigQuery1.webp) ### PostgreSQL, MySQL, SQL Server, Amazon Redshift These four databases share the same configuration form. **Fields:** - **Host**—your database server hostname or IP address - **Port**—pre-filled with the connector's default (3306 for MySQL, 5432 for PostgreSQL, 1433 for SQL Server, 5439 for Redshift) - **Username**—database user with write permissions - **Password**—database user password - **Database**—name of the target database - **Table name** (optional)—if left blank, Mammoth uses a default name derived from the Dataset and View Column names longer than 63 characters make the export fail, so shorten them first. **Important:** Whitelist Mammoth's IP address (`34.255.92.234`) in your database firewall before clicking **Validate Connection**. The required IP is shown at the top of the form. Click **Validate Connection** to confirm Mammoth can reach your database (it creates and then drops a test table) before clicking **Apply**. Apply itself only checks that the required fields are filled in—it isn't blocked by a failed or skipped validation, so validating first is the only way to catch bad credentials before the export runs. **Include hidden columns:** A checkbox appears if your View has columns that are hidden in the grid. Enable it to include those columns in the export output. ![External MySQL export form with an IP allowlist notice and Host, Port, Username, Password, Database and Table name fields](https://mammoth.io/docs/images/20260422_170634_MySQLexternaldestinationformshowingIPwhitelist1.webp) ### Elasticsearch **Fields:** - **Host**—your Elasticsearch server hostname - **Port**—default 9243 - **Username**—Elasticsearch username - **Password**—Elasticsearch password - **Batch Size**—number of records per batch (default: 2,000) - **Index Name**—name of the Elasticsearch index to write to - **Connect Via**—HTTPS or HTTP (default: HTTPS) **Important:** Whitelist Mammoth's IP address (`34.255.92.234`) in your Elasticsearch firewall before clicking **Validate Connection**. Click **Validate Connection** to confirm Mammoth can reach your instance before clicking **Apply**—Apply itself isn't gated on a successful validation, so validating first is the only way to catch bad credentials before the export runs. **Include hidden columns** is available if your View has hidden columns. ![External Elasticsearch export form with Host, Port, Username, Password, Batch Size, Index Name and Connect Via fields](https://mammoth.io/docs/images/20260422_170732_ElasticsearchformshowingHostPortUsername1.webp) ### SFTP **Fields:** - **Host**—SFTP server hostname - **Port**—default 22 - **Username**—SFTP login - **Password**—SFTP password - **Directory** (optional)—destination folder on the server; defaults to the home directory - **File Name**—name for the delivered file; auto-filled from the Dataset and View names - **Randomize file name**—appends a random suffix to the filename to avoid overwriting previous deliveries The SFTP form has no hidden-columns option and no **Validate Connection** button; hidden columns are not delivered. ![External SFTP export form with Host, Port, Username, Password, Directory, File Name and a Randomize file name checkbox](https://mammoth.io/docs/images/20260422_170822_SFTPformshowingHostPortUsernamePasswordDirectory1.webp) ### SharePoint **Fields:** - **Tenant ID**—your Microsoft Azure tenant ID - **Client ID**—the app registration client ID - **Client Secret**—the app registration client secret - **Site URL**—your SharePoint site URL (e.g. `contoso.sharepoint.com/sites/MySite`) - **Document Library** (optional)—the document library to place the file in - **Folder Path** (optional)—subfolder path (e.g. `/General/Folder`) - **File Name**—name for the delivered file **Include hidden columns**—this checkbox always appears on the SharePoint form, regardless of whether the View has any hidden columns. ![External SharePoint export form with Tenant ID, Client ID, Client Secret, Site URL, Document Library and Folder Path fields](https://mammoth.io/docs/images/20260422_170910_SharePointformshowingTenantID1.webp) ### Azure Blob Storage Authenticates via an Azure AD app registration, the same way as SharePoint and OneDrive. **Fields:** - **Tenant ID**—your Microsoft Azure tenant ID - **Client ID**—the app registration client ID - **Client Secret**—the app registration client secret - **Storage Account Name**—e.g. `mystorageaccount` - **Container Name**—e.g. `my-container` - **Folder Path** (optional)—e.g. `exports/data`; defaults to the root of the container - **File Name**—name for the delivered file **Include hidden columns**—this checkbox always appears on the form, regardless of whether the View has any hidden columns. ### OneDrive Authenticates via an Azure AD app registration, the same way as SharePoint and Azure Blob Storage. **Fields:** - **Tenant ID**—your Microsoft Azure tenant ID - **Client ID**—the app registration client ID - **Client Secret**—the app registration client secret - **User ID**—the OneDrive account to deliver to, e.g. `user@contoso.com` - **Folder Path** (optional)—e.g. `/Documents/Exports`; defaults to the root of the user's OneDrive - **File Name**—name for the delivered file **Include hidden columns**—this checkbox always appears on the form, regardless of whether the View has any hidden columns. ### Tableau Server/Cloud Publishes the View's output directly as a Tableau data source, using a Personal Access Token rather than a username and password. **Fields:** - **Server URL**—e.g. `https://prod-apnortheast-a.online.tableau.com` - **Site Name** (optional)—leave empty for the default site - **Token Name**—the Personal Access Token's name - **Token Secret**—the Personal Access Token's secret value - **Project Name**—the Tableau project to publish into (defaults to `default`) - **Datasource Name**—auto-filled from the Dataset and View names This form has no "Include hidden columns" checkbox—hidden columns are never included in a Tableau publish. ### REST API Export Pushes each pipeline run's data to any HTTP endpoint you specify, as a POST, PUT, or PATCH request. **Fields:** - **Base URL**—e.g. `https://api.example.com/v1` - **Authentication**—choose one: - **None** - **API Key**—Key Name (header name, e.g. `X-API-Key`) and Key Value - **Bearer**—Bearer Token - **Basic**—Username and Password - **OAuth 2.0**—Client ID, Client Secret, Authorization URL, and Token URL - **Endpoint path**—e.g. `/v1/records` - **HTTP method**—POST, PUT, or PATCH - **Wrap path** (optional)—wraps the row data under this key in the request body; pre-filled with `records` - **Batch size**—number of rows sent per request (default: 1,000, maximum 10,000) - **Advanced Settings**: - **Timeout (sec)**—request timeout (default: 30) - **Verify SSL Certificate**—on by default; turn off only for endpoints with self-signed certificates Mammoth refuses to send to a URL that resolves to a private or reserved IP address, so the endpoint must be publicly reachable. If the endpoint answers with a 5xx error, Mammoth retries up to 3 times; for a 429 (rate limited) response it retries up to 5 times. OAuth 2.0 uses the authorization-code flow. ## Additional options The footer of every export form shows a read-only **Position** and **Update method** line. Click the pencil icon to edit them. ### Position (keep at end) By default the export task sits at the end of the pipeline, so it always runs after all transformation tasks. Mammoth keeps it there automatically. Change it only if you need the export at a specific position (rare). Live link and the managed databases have no position option. ### Update method Controls how data is written to the destination on each run: - **Send to Dataset**: **Replace** or **Combine**. - **External Google BigQuery**: **Replace**, **Combine** or **Merge**. See the [external Google BigQuery section](#google-bigquery-external) for the full table. ## Auto-sync Every export destination has an **Auto-sync** setting, shown as ON or OFF on its task card and switched from the step's options menu. When ON (the default), the destination receives updated data automatically after each pipeline execution. When OFF, data is held until you release it manually from the Monitor panel. **When to turn Auto-sync off:** - You need to review output before it reaches a downstream system - A compliance process requires human sign-off before data delivery - You're testing pipeline changes and don't want production destinations updated yet Each export destination can be paused independently—for example, you can keep Auto-sync ON for a Live Link while holding a database export pending for review. ## Monitor The **Monitor** panel (opened from its icon in the left sidebar) tracks exports and pipeline health across up to four tabs: **Needs Attention**—everything currently waiting on you, with an orange badge count. Within this tab: - An **Errors** section. - A **Pending** section lists items with new data waiting to be released—including destinations with Auto-sync OFF that have new pipeline output. Each item shows an **Update** button that releases the pending data to that destination immediately, without re-enabling Auto-sync. - A separate **Governance** section covers checkpoint approvals and failed Data Checks earlier in the pipeline. - A **Pending Retentions** section. **Running**—currently executing pipeline and export tasks across the workspace, with long-running tasks flagged as stuck. **Paused**—every data source (View, Dataset) and export destination that has Auto-sync intentionally turned off, regardless of whether it currently has pending data. Useful for auditing which tasks are in manual-approval mode. Includes a shortcut to turn Auto-sync back on. **Activity Log**—a history of workspace activity (visible if you have permission to view it). ![Monitor panel with the Needs Attention, Running, Paused and Activity Log tabs](https://mammoth.io/docs/images/20261009_004015_Monitor-panel-tabs.webp) For regulated workflows, combine Auto-sync OFF on critical destinations with a Data Check task earlier in your pipeline. The Data Check runs automated quality validation (null checks, row count thresholds, value ranges) and halts the pipeline if data fails—so only validated data ever reaches the manual review stage. ## Troubleshooting ### Validate Connection fails **Cause:** Mammoth's IP address (`34.255.92.234`, shown in the form) is not allowed in your database firewall, or the credentials lack permissions. Validate Connection checks for CREATE TABLE and DROP TABLE permissions. **Fix:** Add the IP address to your firewall allowlist. Also grant INSERT permission, which the data delivery needs once the export runs. ### Destination not updating after pipeline runs **Cause:** Auto-sync is OFF for the destination, or the View's own Auto-sync is OFF so the pipeline never re-executes and no export runs. **Fix:** Turn Auto-sync ON for the destination and the View. Check **Monitor → Needs Attention → Pending** for exports waiting to be released. ### Schema conflict error **Cause:** This applies to BigQuery exports using the Combine or Merge update method, where the destination table persists between runs. The View's columns no longer match the destination table's columns, so the run fails. PostgreSQL, MySQL, SQL Server, and Redshift destinations drop and recreate the table on every run, so this error doesn't apply to them. **Fix:** Delete and recreate the destination, or adjust the View to match the original column structure. ### BigQuery Merge fails **Cause:** The Reference column is missing from the View or the destination table, or the names or data types don't match. **Fix:** Confirm the Reference column exists in both with matching names and compatible data types. ### Export shows SUCCESS but destination didn't update **Cause:** View Auto-sync is OFF (the pipeline didn't re-execute), or Export Auto-sync is OFF on specific destinations (delivery is held pending). **Fix:** Open **Monitor → Needs Attention → Pending** to see and release pending exports. --- # FAQ and common tasks URL: https://mammoth.io/docs/learn/faq/ · Updated: 2026-11-02 Quick answers to common Mammoth how-to questions on data import, transforms, automations, sharing, dashboards, access, and recovery, each linked to the full guide. This page answers the most common "how do I" questions, grouped by area. Each answer is short and links to the full guide. ## Getting data in ### How do I upload a file? Click **+ New Dataset**, choose **Upload**, drop your file or click **Upload file**, and click **Submit**. See [Uploading files](https://mammoth.io/docs/learn/data-sources/file-upload/). The limit is 50 MB per upload request on every plan, and a folder counts as one request. See [Limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/). ### How do I paste data from a spreadsheet? Click **+ New Dataset**, choose **Paste from Clipboard**, then choose **Click to paste data** or press Ctrl+V. Name the dataset and click **Create new dataset**. See [Paste from clipboard](https://mammoth.io/docs/learn/data-sources/paste-from-clipboard/). ### How do I import a file from a URL? Click **+ New Dataset**, choose **From URL**, enter the file URL, and click **Submit**. See [Import from URL](https://mammoth.io/docs/learn/data-sources/import-from-url/). ### How do I send data to Mammoth from another system? Use a webhook. Choose **Webhooks** when you create a dataset, pick a **Dataset mode** of **Combine with older data** or **Replace the older data**, and click **Create new dataset**. See [Webhooks](https://mammoth.io/docs/learn/data-sources/webhooks/). ### How do I add new data to an existing dataset? Open the dataset's preview panel, go to **Batches**, and click **Add new data**. You can also use the row's menu and choose **Add or Replace data**. See [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/). ### How do I try Mammoth without my own data? Choose **Sample Files** when you create a dataset. See [Sample files](https://mammoth.io/docs/learn/data-sources/sample-files/). ### How do I generate test data with AI? Click **+ New Dataset** and choose **Generate with AI**. Set the row count to **Let AI decide** or **User defined**. See [Generate with AI](https://mammoth.io/docs/learn/data-sources/generate-with-ai/). ### How do I connect a database or business app? Add a connector, which follows the same flow for every source. See [Connectors](https://mammoth.io/docs/learn/connectors/) for the list and each connector's guide, and [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/) for databases. ## Transforming data ### How do I switch to Draft Mode? Open the **More Pipeline options (...)** menu at the top of the Pipeline panel and turn on Draft Mode. Your changes then queue as Pending Updates until you click **Apply now**. See [Understanding the pipeline](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/). ### How do I remove duplicate rows? Use the **Remove Duplicate Rows** task and, in **Evaluate duplicates from**, choose **All columns**, **All columns, except**, or **Only specific columns**. See [Filter, label & replace](https://mammoth.io/docs/learn/transform/filter-label-replace/). ### How do I join two views? Use the Join task from Unify. Click **Select a view to join with**, define the key columns, choose the columns to bring in, and set the join type. See [Unify](https://mammoth.io/docs/learn/transform/unify/). ### How do I use AI to transform a column? Open a View, click the **Describe your transformation** bar, and choose **Generative AI**. A Workspace Owner must add an external API key first. See [Generative AI](https://mammoth.io/docs/learn/transform/generative-ai/). ### How do I fix a pipeline task that failed? Click **Fix error** on the failed task card. The task's panel reopens with the problem highlighted. See [Pipeline health and error states](https://mammoth.io/docs/learn/transform/pipeline-health-and-error-state/). ### How do I stop bad data from moving down the pipeline? Add a Data Check. Open the Transform menu, choose **Controls**, select **Data Check**, configure the check, and click **Apply**. See [Pipeline controls](https://mammoth.io/docs/learn/transform/controls/). ### How do I reuse a value across many filters? Create a Parameter. Click **New Parameter** in the Data Library, then reference it in your pipeline conditions. See [Parameters and snippets](https://mammoth.io/docs/learn/data-library/parameters-snippets/). ## Exploring data ### How do I get AI observations about my data? Click the **View Insights** button on the right side of the action bar, next to the Export button. See [View insights](https://mammoth.io/docs/learn/explore-discover/view-insights/). ### How do I check the quality of my data? Click the **View Data Quality** button on a View to generate a Data Quality Report. See [Data quality report](https://mammoth.io/docs/learn/explore-discover/data-quality-report/). ### How do I build a KPI from a column? Use the Metrics panel. See [Metrics panel](https://mammoth.io/docs/learn/explore-discover/metrics-panel/). ## Automating ### How do I create an automation? In the Data Library, open the **Automations** tab, click **New automation**, and select the type. See [Creating an automation](https://mammoth.io/docs/learn/automations/creating-an-automation/). ### How do I refresh a dataset on a schedule? Create a **Dataset Refresh** automation, pick the datasets, and choose **On schedule** in the **Set Schedule** step. Only datasets connected to an API or database can be refreshed. See [Dataset Refresh](https://mammoth.io/docs/learn/automations/dataset-refresh/). ### How do I email a view to my team on a schedule? Create a **Messaging** automation, set the trigger, fill in the **Message settings**, and click **Send test email** before saving. See [Messaging](https://mammoth.io/docs/learn/automations/messaging/). ### How do I merge incoming files into one dataset? Create a **Data Consolidation** automation with a destination dataset and a source folder. See [Data Consolidation](https://mammoth.io/docs/learn/automations/data-consolidation/). ### How do I run an automation now? Open the automation and click **Run now**, or use **Run now** in the row's menu. The automation must be Active. See [Managing automations](https://mammoth.io/docs/learn/automations/managing-automations/). ### How do I pause an automation? Turn off **Status** in the detail panel, or turn off **Automation Status** in the row's menu. Turn it back on to resume. See [Managing automations](https://mammoth.io/docs/learn/automations/managing-automations/). ### How often can I schedule a refresh? The shortest interval depends on your plan: Free has no scheduled refresh, Starter refreshes weekly or less often, Team daily or less often, and Pro every 3 hours or less often. Hourly (every 1 hour) is not available on any self-serve plan. See [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/) and [Limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/#schedules). ## Exporting and sharing ### How do I download a view? Click the download button in the View toolbar, select a format, and click **Confirm**. See [Download options](https://mammoth.io/docs/learn/export-share/download-options/). ### How do I send a view to a destination after every pipeline run? Click **Export** in the View toolbar and choose a destination. The export becomes a task pinned to the end of your pipeline. See [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/). ### How do I get a URL that always serves my latest data? Click **Export**, select **Live link**, and click **Apply**. Use **Copy** on the task in the pipeline panel to get the URL. Each View can have one Live Link. See [Live links](https://mammoth.io/docs/learn/export-share/live-links/). ### How do I create a dashboard? Click **Dashboards** in the left sidebar and click **Create**. Pick your data, then choose a starting point or describe what you want to the AI. See [Creating dashboards](https://mammoth.io/docs/learn/dashboard/creating-dashboards/). ### How do I share a dashboard? Open the dashboard, click **Share**, and choose **Sign-in required** or **Anyone with the link**. Click **Publish & copy link**, or invite people by email. See [Publishing and sharing dashboards](https://mammoth.io/docs/learn/dashboard/share-dashboard/). ## People and access ### How do I invite someone to my workspace? A Workspace Owner clicks **Invite Users** in User Management, enters email addresses, optionally assigns projects, and clicks **Invite**. See [Workspace settings](https://mammoth.io/docs/learn/workspace-management/workspace-settings/). ### How do I add someone to a project? Click the **Share** button in the Data Library header, or choose **Manage Users** in the project menu. See [Sharing a project](https://mammoth.io/docs/learn/projects/project-sharing/). ### How do I create a project? Open the project selector, choose **New Project**, and click **Create Project**. See [Creating a project](https://mammoth.io/docs/learn/projects/create-project/). ### What can each role do? See the [roles and permissions matrix](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix). ### How do I create an API token? A Workspace Owner opens the **API Keys** tab, clicks **Generate key** on the **API tokens** card, enters a name, optionally turns on **Project scoped** and picks a project, and clicks **Create key**. Click **Copy secret** straight away, because Mammoth shows the secret once. Then click **Done**. See [Workspace settings](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#api-tokens). ## Recovery and monitoring ### How do I restore something I deleted? Open **Trash**, hover over the row, and click **Restore item**. Items stay in Trash for 30 days by default. See [Trash and recovery](https://mammoth.io/docs/learn/trash-recovery/). ### How do I see who changed something? Open **Monitor**, then the **Activity Log** tab, and filter the log. See [Activity Log](https://mammoth.io/docs/learn/monitor/activity-log/). ### What limits apply to my plan? See [Limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/). ### What do the terms mean? See the [Glossary](https://mammoth.io/docs/learn/glossary/). --- # Getting started as a data analyst URL: https://mammoth.io/docs/learn/getting-started/as-a-data-analyst/ · Updated: 2026-11-02 A 30-day plan for data analysts moving from manual Excel workflows to automated Mammoth pipelines, with the five core transformations to learn first. This guide is for data and business analysts who spend most of their day in Excel and want to replace repetitive copy-paste work with automated pipelines, without coding. It is a 30-day plan: start with Day 1 below, then move to Week 1 and Month 1. The guide covers your first 30 days with Mammoth, from uploading your first file to replacing manual workflows with automated pipelines. ## The 30-day learning path The plan has three milestones: **Day 1** → First transformation and first complete pipeline\ **Week 1** → Replace a manual workflow\ **Month 1** → Multiple automated workflows and a shared dashboard ## Day 1: Build your first pipeline Start by automating one repetitive task. Pick a file you work with regularly. ### Upload your Excel or CSV file **Prerequisite**: A Mammoth account and an Excel or CSV file. Drag and drop your Excel file or CSV into Mammoth. The data opens in a spreadsheet-like interface. ### Explore columns with Explore Cards Click the **Explore** icon on a column to open its Explore Card. These interactive visualizations show you: - **Text columns**: Bar charts displaying the most common values - **Numeric columns**: Distribution charts revealing patterns and outliers - **Date columns**: Timeline views showing data spread ![View with Explore Cards for unit_price, product_name, and order_date above the data grid, filtered to unit_price 200 to 300](https://mammoth.io/docs/images/20260408_153452_Explore_card.webp) Explore Cards show data quality issues, patterns, and distributions without formulas. Double-click any value in an Explore Card to filter your data. These quick filters help you investigate issues and can be converted into permanent pipeline tasks later. ### Remove test rows with a Conditional Filter The most common starting point is removing unwanted rows. This example excludes test data: 1. Click the **+** button (tooltip **Add a task**) to open the transform picker 2. Select **Filter, Label & Replace → Conditional Filter**, or search for it in the picker 3. Choose your column (like "Status") 4. Select "does not contain" 5. Type "test" 6. Click **Apply** **Expected result**: The filter appears as a task in the Pipeline panel and runs on every future data refresh. **Your Excel process:**\ Open file → Apply filter → Copy visible cells → Paste to new sheet → Save as new file **Mammoth process:**\ Open View → Add Conditional Filter → Done The Mammoth pipeline saves this logic, so next month's data uses the same pipeline. ## Week 1: Replace a manual workflow Choose the workflow that matches your situation. ### Option A: Monthly report preparation (most common) **Current state**: Monthly downloading, cleaning, combining, calculating, and formatting of data for reports. **Mammoth solution**: One-time pipeline setup, then run and export each month. **Workflow steps:** 1. **Connect Your Data**\ Upload your Excel file or connect directly to your database with a Live Connection. With a Live Connection, a Dataset Refresh automation can pull new data on a schedule, so you don't download files manually. 2. **Build Your Pipeline**\ Add the transformations you typically do manually: - **Conditional Filter**: Remove test accounts or old data - **Bulk Replace**: Standardize company names (Mammoth suggests groups of similar values) - **Convert Column Type**: Fix dates and numbers that imported as text - **Math Functions**: Calculate totals, percentages, growth rates - **Group & Pivot**: Summarize by category or time period 3. **Save as View**\ Your pipeline automatically saves. Every transformation runs the same way every time. 4. **Set Up Automation**\ Create a **Dataset Refresh** automation and choose your schedule. The pipeline runs automatically on every refresh. ### Option B: Daily sales dashboard **Current state**: Daily extracting from CRM, cleaning, pivoting, and emailing results. **Mammoth solution**: Automated refresh with a live dashboard, so stakeholders see current data without waiting for your email. ### Option C: Weekly metrics email **Current state**: Weekly consolidating sources, calculating KPIs, and formatting for stakeholders. **Mammoth solution**: A scheduled Messaging automation emails the view to stakeholders. ## Essential transformations for business users Start with these five transformations to automate most manual workflows. ### 1. Conditional Filter: remove unwanted data **Common uses:** - Filter to current year only: `Order_Date is later than 2024-01-01` - Remove test accounts: `Email does NOT contain @test.com` - Focus on specific regions: `Region is East OR West` - Exclude cancelled orders: `Status is NOT Cancelled` ### 2. Bulk Replace: standardize messy data **Common uses:** - Company names with variations: "iPhone 15 Pro", "iphone 15 pro", "iPhone15Pro" → all become "iPhone 15 Pro" - Product categories: many variations → a short list of standard categories - Department names: "HR", "Human Resources", "HR Dept" → "Human Resources" When you use Bulk Replace, Mammoth groups similar values and suggests standardization. You review and approve. ### 3. Join: combine data from multiple sources **Common uses:** - Add customer names to order IDs: No more VLOOKUP formulas - Enrich sales data with product details from master list - Lookup pricing information for quotes ![Join panel in a View showing two Views side by side, with key column pickers and Left, Right, Inner, and Outer join types](https://mammoth.io/docs/images/20260408_153540_Lookup.webp) ![Excel VLOOKUP with #N/A errors above the equivalent Mammoth Join panel, which matches rows by chosen key columns](https://mammoth.io/docs/images/20260408_153610_Side-by-sidecomparisonshowing.webp) ### 4. Math Functions: calculations **Common uses:** - Calculate profit margins: `(Revenue - Cost) / Revenue` - Year-over-year growth: `(This_Year - Last_Year) / Last_Year` - Running totals for cumulative analysis - Percentage calculations for reporting ### 5. Group & Pivot: summarize data **Common uses:** - Sales by region showing geographic performance - Monthly totals for trending analysis - Category summaries for executive reports - Top 10 customers for account management ## View Insights and View Data Quality Business analysts often need to answer one question before building anything:\ **“Can I trust this data, and what should I fix first?”** **View Insights** and **View Data Quality** answer this without manual checks or formulas. ### View Insights: business-level observations **View Insights** automatically surfaces meaningful observations that help business analysts understand how the data behaves and where analysis may be blocked. Typical observations include: - Inconsistent naming that fragments analysis (for example, the same product appearing under multiple formats) - Sparse or uneven date coverage that prevents trend analysis - Customer purchase patterns indicating low repeat behavior - Pricing spreads that suggest review or standardization - Signals of missing or incomplete tracking These insights allow analysts to **quickly assess readiness**, identify risks, and decide which transformations are required—before investing time in pipeline design. --- ### View Data Quality: formal validation **View Data Quality** provides a structured evaluation of dataset health using standard data quality dimensions. The assessment covers: - **Completeness**: Identification of missing values - **Validity**: Verification of format and rule compliance - **Uniqueness**: Detection of duplicate identifiers - **Consistency**: Identification of value mismatches and variations - **Accuracy**: Flagging values outside expected ranges - **Timeliness**: Measurement of data freshness Each view receives: - An overall **Data Quality Score** - Clearly categorized **critical issues and warnings** - **Recommended actions** to improve quality This enables business analysts to validate data **upfront**, rather than discovering issues after dashboards or reports are built. ## AI features for business users Mammoth's AI features create transformations from a plain-language description, so you don't write syntax or code. ### Describe your transformation (natural language) Instead of clicking through menus, type what you want in the **Describe your transformation** box of the transform picker: **Type:** "Remove orders from test accounts"\ **AI creates:** Conditional Filter excluding test emails **Type:** "Standardize company names"\ **AI creates:** Bulk Replace with smart grouping **Type:** "Calculate profit margin percentage"\ **AI creates:** Math Function with correct formula ### Create a dashboard with AI **Scenario:** You need an executive dashboard showing sales performance. **AI approach:** Describe the dashboard you want, such as "Create sales dashboard showing revenue by region", and Mammoth generates dashboard options from your data. ## Month 1 milestones Track your progress with this 30-day checklist: ### Week 1 achievements - [ ] First dataset uploaded or connected - [ ] First pipeline created (3+ transformations) - [ ] First manual workflow automated - [ ] Improved data quality ### Week 2 progress - [ ] Second workflow automated - [ ] First Join transformation (combining sources) - [ ] First scheduled automation setup - [ ] Shared first View with colleague ### Week 3 expansion - [ ] First **Describe your transformation** request used successfully - [ ] First dashboard created - [ ] Third workflow automated ### Week 4 mastery - [ ] Advanced pipeline (7+ tasks) - [ ] Multi-source consolidation - [ ] Dashboard shared with stakeholders - [ ] Training colleague on first workflow ## Common analyst scenarios and solutions ### Scenario 1: "I have 12 Excel files to consolidate monthly" **Old way:** Open each file, copy data, paste into master, delete headers, fix formatting, save. **Mammoth way:** Upload files to same Dataset as Batches, View automatically combines them, run the pipeline, and export or create a dashboard. ### Scenario 2: "My VLOOKUP keeps breaking" **Old way:** VLOOKUP formula across sheets breaks when columns move, #N/A errors everywhere, long debugging sessions. **Mammoth way:** Join transformation with a visual interface that matches rows by the columns you choose. ### Scenario 3: "I need to send the same report weekly" **Old way:** Download new data, run through manual steps, format for executives, email manually. **Mammoth way (automated):** Schedule dataset refresh, pipeline runs automatically, dashboard updates, automated email notification sent. ### Scenario 4: "Data quality issues waste my time" **Old way:** Discover issues after analysis started, backtrack to fix, rebuild analysis. **Mammoth way:** Use **View Insights** to surface potential issues early and **View Data Quality** to formally validate data before building. Problems are identified upfront, recommended actions are provided, and fixes can be applied once and automated through pipelines. ## Where to get help **In-app resources:** - Hover tooltips on features - **Describe your transformation** generates transformations from descriptions - The **Help (book icon)** in the Function Panel opens the documentation for that transformation **Documentation:** - Getting started guides, like this one - Transformation function reference - Common workflow examples **Support:** - Use the Support option in the sidebar to ask questions, report issues, or share feedback ## Next steps after month 1 Once your first workflows are automated, here's how to continue growing: ### Months 2 to 3: Intermediate skills - Advanced Join patterns (multiple sources, complex conditions) - Complex conditional logic with AND/OR operators - Custom aggregations and calculations - Dashboard interactivity and filters ### Months 4 to 6: Advanced capabilities - API integrations for real-time data - Advanced automation, such as running Dataset Refreshes in a sequence - Performance optimization for large datasets ### Becoming a team resource As you gain expertise, you can: - Train colleagues on workflows you've automated - Document best practices for your team ## Next step Follow the [Quick start](https://mammoth.io/docs/learn/getting-started/quick-start/) to upload a file and build your first pipeline, or read [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/). --- # Getting started as a manager URL: https://mammoth.io/docs/learn/getting-started/as-a-manager/ · Updated: 2026-11-02 For data team managers: set up a Mammoth project, invite your team, standardize recurring workflows, review the Activity Log, and share dashboards. This guide is for managers of data teams. It covers how to set up a project, invite your team, standardize recurring workflows, review team activity, and share executive dashboards. You don't need to build pipelines yourself, because your team does that. Start with the Project Admin section below, then follow the first-48-hours plan. ## The Project Admin role When you create a project in Mammoth, you automatically become the Project Admin for that project. The role gives you management capabilities without requiring you to handle technical details. ![Projects list with name, content, last updated, users, and project role columns, showing Admin and Editor roles and a New Project button](https://mammoth.io/docs/images/20260408_154152_Projectadminoverview.webp) ### What a Project Admin can do As Project Admin, you control your project's team, data access, and governance settings. You set the boundaries and your team works within them. **Core capabilities**: - **Team Management**: Add workspace members, invite external users, and remove access when someone leaves - **Access Control**: Create and manage the Live Connections your team uses - **Activity Monitoring**: See what your team is working on through the Activity Log (Monitor → Activity Log tab) ### Project Admin versus Project Editor This table shows what each role can do: | Capability | Project Admin (You) | Project Editor (Your Team) | | --- | --- | --- | | Add or remove project members | ✓ | ✗ | | Rename or delete the project | ✓ | ✗ | | Create, update, or delete Live Connections | ✓ | ✗ | | Create or modify queries from Live Connections | ✓ | ✓ | | Add, edit, or delete datasets, views, and pipelines | ✓ | ✓ | Designate a backup admin from your team for business continuity. If you're unavailable, someone else can handle urgent team access needs. Project Admins control **who can do what**, and Project Editors control **how they do it**. ## Your first 48 hours as a manager This plan sets up the foundation for your team rather than covering every feature. ### Hour 1: Create a project and pick a use case **Prerequisite**: A Mammoth account. **Create your first project** 1. Open the project selector in the Data Library and click **New Project** 2. Name it something meaningful: "FP&A Monthly Reporting" or "Operations Analytics" 3. Confirm to create the project **Expected result**: The project opens and you are its Project Admin. ![Manage users dialog for the Operations Analytics project with the signed-in user listed as Admin](https://mammoth.io/docs/images/20260408_153856_project_admin_permission.webp) **Platform hierarchy** Mammoth organizes data in this order: - **Workspace**: Your subscription - **Project**: Your team's work area - **Dataset**: Where data lives after upload or connection - **View**: Where your team transforms data - **Dashboard**: What you share with executives Managers mostly work at the Project level: managing team access, reviewing activity, and creating dashboards from the team's work. **Choose your first use case** Migrate one recurring process first rather than everything at once. Candidates: - Monthly financial close report - Weekly operations dashboard that requires manual updates - Quarterly analysis that involves copying data between 5 spreadsheets This process becomes the proof of value for wider adoption. ### Hours 2 to 4: Invite your team and set permissions **Start small**: Invite 1 or 2 team members first. They can help onboard the rest of the team. 1. Click on your project's three dot menu 2. Click **Manage Users** 3. Select the workspace members to add 4. Assign their role: **Project Editor** for most team members, **Project Admin** for backup admins **Expected result**: The added members appear under **Shared with**, each listed by role. **Configure Project Settings** Set up governance from the start: 1. Open **Project Settings** from the project menu 2. The menu options depend on your role in that project: **Project Admins** see the full set of options: - **Project Settings**: rename the project, set a date format, and control who can access it - **Manage Users**: add or remove workspace members and assign their project roles - **Leave Project** - **Delete Project** **Project Editors** see only: - **Leave Project** You can change these settings at any time. Starting restrictive and loosening later is easier than revoking access afterward. ### Hours 24 to 48: Observe a first team workflow Watch how the platform works in practice: 1. **Have a team member upload a recurring data file** (like last month's sales report) 2. **Watch them build a pipeline.** Your goal is to understand the process, not to build it yourself. 3. **Review the Activity Log** to see their actions recorded 4. **Schedule a brief team sync** to discuss how this could standardize your recurring workflow ![Activity Log table for the last 7 days listing events such as Create project, Create dataset, Create view, and Add tasks to pipeline](https://mammoth.io/docs/images/20260408_154226_Activitylog_from_team.webp) The aim is to understand how standardization works so you can replicate successful patterns across your team. ## Team standards and governance This section covers how to create consistency without managing each person's execution. ### Process standardization framework Use this five-part pattern for recurring workflows: **1. Identify repetitive workflows** Look for processes that happen monthly, quarterly, or on-demand regularly: - Monthly close reports - Weekly operations summaries - Quarterly board presentations - Recurring client deliverables **2. Document the current process** Spend time with the team member who does it today. Understand: - Where does data come from? - What transformations happen? - What's the final output? - How long does it take today? **3. Build a reference pipeline** Have your most technical team member create the reference version in Mammoth. This becomes your template. **4. Enable team replication** Other team members copy the reference pipeline and adapt for their specific needs. The core logic stays consistent. **5. Monitor adoption** Use the Activity Log weekly to see: - Who's using the reference pipeline? - Where are people deviating? (might reveal improvements) - Are people still doing manual processes? ![Animation of a pipeline being built task by task in the Pipeline panel of a View](https://mammoth.io/docs/images/20260303_112757_Pipeline.webp) ### Governance configuration Set boundaries that protect data while your team works independently. #### Access control for projects Project access is role-based and limited to invited members only. - **Project Admin**: Full permissions, including managing members and project settings - **Project Editor**: Can work with project data but cannot manage members or create Live Connections Users added to the project have an assigned role (Admin or Editor). The project's **Who can access** setting controls whether everyone in the workspace, selected people, or only you can access it. #### Connector restrictions for projects Connector availability is managed at the **project level** by Project Admins. **To create a new connection (Project Admin only):** 1. Click **New Dataset** 2. Select **Connectors** 3. Click **New Connection** 4. Configure and save the connection Once created, the connection becomes available within the project and can be used by Project Editors to create datasets. If a connector has not been created or enabled, project members will see a prompt instructing them to contact their Project Admin to request access. Only Project Admins create connections, so data source access stays controlled. ## Executive dashboards for leadership visibility Managers can generate dashboards from a View their team prepared, instead of asking the team to build presentation materials. ### Why managers create dashboards AI-powered dashboard creation lets managers: - **Answer executive requests** without waiting for team availability - **Board presentation materials** generated from your team's data - **Give stakeholders self-service access**, which reduces ad-hoc data requests to your team ### Create a dashboard from a View **Prerequisite**: Your team has prepared the data in a View. 1. **Click Create** to open **What do you want to build?** 2. **Pick the lane**: **With my data** builds from a dataset (or starts blank), and **With a shape** starts from a template, a report you already send, or one of your existing dashboards 3. **Choose your team's prepared data** and review the starting points Mammoth suggests from your columns and dates, or describe what you want 4. **Pick a format**: Dashboard, Slides, Doc, or Q&A 5. **Refine if needed** 6. **Share** using **Sign-in required** or **Anyone with the link** (see the next section) ![Publish as Dashboard dialog with three AI dashboard suggestions, a describe-your-dashboard field, and a Generate Dashboard button](https://mammoth.io/docs/images/20260408_154250_Dashboard_creation_with_AI_suggestion_and_prompt.webp) **Expected result**: A dashboard you can share. ### Dashboard sharing options In the **Share** dialog, choose who can open a dashboard: **Anyone with the link** - No sign-in needed - Suited to: Board members, external partners, public reporting - Use when: Content is appropriate for public view **Sign-in required** - Your project, plus people outside it you invite, must sign in to Mammoth - Suited to: Internal team dashboards, department KPIs - Use when: Content is internal-only and viewers have Mammoth accounts ![Publish & Share dialog with the Access Type menu open, offering Authenticated (log in or register) and Public (anyone can view)](https://mammoth.io/docs/images/20260408_154321_Dashboard_sharingmode.webp) For board presentations, use **Anyone with the link** and share the link only by secure email. Viewers need no sign-in, and you control who receives the link. ### Dashboard use cases for managers **Board preparation: monthly financial overview** Traditional approach: The team creates slides with static charts. Mammoth approach: 1. Open your monthly financial View (team has prepared the data) 2. Click **Create** and select the executive overview suggestion 3. Generate the dashboard 4. Share with **Anyone with the link** and send the link to board members **Expected result**: The board sees live data, and metrics update when the data refreshes. **Executive requests: ad-hoc analysis without involving the team** Traditional approach: An executive asks "Show me regional performance trends", you interrupt a team member, and wait for a response. Mammoth approach: 1. Open relevant View 2. Generate dashboard with prompt: "Regional performance with trend analysis" 3. Share with **Sign-in required** (internal only) 4. No team interruption **Cross-functional sharing: give operations current data** Traditional approach: Email weekly Excel reports → recipients manually update their trackers → data becomes stale immediately. Mammoth approach: 1. Create dashboard once from operations View 2. Share with **Sign-in required** and invite the operations team 3. Data updates when the View refreshes 4. No weekly email or manual updates are needed ## Monitor team activity with the Activity Log The Activity Log shows workspace and project activity, helping managers understand usage patterns, and maintain governance oversight. ### What the Activity Log shows All key actions across projects and workspace settings are recorded automatically: - **Dataset activities**: Dataset creation, updates, combinations, and data additions - **Pipeline activities**: Task and action updates, automation changes, batch status updates - **View & automation activities**: View creation or reruns, automation updates - **Workspace & project changes**: User invitations/removals, role updates, project creation or renaming Each entry includes the event type, affected object, author, category, and timestamp. ![Activity Log filtered by 4 authors and 41 events, listing Create dataset, Invite users to workspace, Create view, and Create project](https://mammoth.io/docs/images/20260408_154349_Activitylog_from_team-1.webp) ### Weekly Activity Log review Review team activity weekly. **Look for success patterns** - Pipeline replication: Multiple team members using reference workflows (the goal) - Consistent naming: Team following conventions - Dashboard creation: Team generating stakeholder-facing outputs independently **Identify training opportunities** - Repeated manual processes: Team member doing same steps weekly (candidate for pipeline) - Complex pipelines rebuilt frequently: Might need template or training on best practice - Export patterns: Heavy exports might indicate gaps in dashboard sharing **Acknowledge wins**\ When a team member replicates a reference pipeline or creates their first dashboard independently, acknowledge it. ### Privacy and appropriate use of the Activity Log The Activity Log shows **what happened**, not detailed data contents. You see: - "Sarah created a Conditional Filter task on revenue column" You don't see: - The actual revenue values - Row-level data details The Activity Log supports monitoring process adoption, not reading team members' data. When you see repeated patterns, ask "How can I help?" ### Common patterns indicating training needs **Pattern**: Team member rebuilding similar pipelines from scratch repeatedly.\ **Opportunity**: Create a reference template and conduct a short training session. **Pattern**: Heavy export activity to Excel, minimal dashboard creation.\ **Opportunity**: Dashboard training might be needed. Team member might not know this capability exists. **Pattern**: Same dataset uploaded manually every week.\ **Opportunity**: Set up a Dataset Refresh automation using a Live Connection. ## Scaling to the whole team Once your first 1 or 2 team members are working in Mammoth, expand in stages. ### Months 1 to 3: expansion plan **Invite the remaining team members** Stagger onboarding: - **Weeks 1 to 2**: Champions (1 or 2 people) - **Weeks 3 to 4**: Early adopters (3 or 4 people) - **Weeks 5 to 8**: Full team rollout Early adopters can help train later team members. **Create a reference pipeline library** Document your team's most common workflows: - Monthly financial close - Weekly operations report - Quarterly analysis template - Customer data standardization Each reference pipeline should have: - Descriptive name - Comments explaining business logic - Example use cases - Owner contact for questions **Establish knowledge sharing** Hold a monthly pipeline show-and-tell: - A team member presents a workflow they automated - Others ask questions and suggest improvements **Document team best practices** Write down what the team learns: - Screenshot reference pipelines with annotations - Create simple wiki page (or shared doc) with team conventions - Update as team discovers better approaches ## Collaboration across teams ### Separate projects for different workstreams Keep project-level isolation: - Project: “FP&A Monthly Close” (finance team) - Project: “Operations Weekly Reporting” (operations team) - Project: “Executive Dashboards” (leadership visibility) Projects do not share datasets or connections directly. This keeps security boundaries and ownership clear. ### Controlled data sharing between projects When Project A requires data from Project B, use one of the supported sharing methods: **For regular, structured sharing (recommended):** - Project B exports a View to a shared database (e.g., PostgreSQL, BigQuery) - Project A connects to that database via a Live Connection - Data updates can be scheduled via automation **For one-time transfers:** - Export from Project B - Import into Project A **For read-only access:** - Share a Published View or Dashboard link Direct cross-project dataset access is not supported. Sharing must use export or publication workflows. ### Connector strategy across projects Connections are project-scoped and must be created within each project. Recommended approach: - Establish approved shared databases for cross-project data exchange - Use read-only credentials for production systems - Define department-level access controls within shared data infrastructure This model keeps project isolation while allowing shared data. ### Measuring team impact Track metrics that matter to leadership. Record a baseline before you automate. **Time** - **Before**: How long monthly close took - **After**: Time with automated processes **Quality** - **Error rates**: Manual errors before and after automation - **Rework**: How often reports need corrections **Adoption** - **Active users**: How many team members use the platform - **Survey**: Whether team members feel process standardization has improved their work ### Capabilities to add after 3 to 6 months **Scheduled data refresh with automations** Schedule your data pipelines to run automatically: - Daily: Operations dashboards update each morning - Weekly: Management reports ready at the start of the week - Monthly: Financial close data refreshed on schedule Your team sets this up once, and it runs on its schedule. **Advanced collaboration features** - Pipeline templates: Use **Save as template** to keep successful patterns - Dashboard templates: Standardized executive reporting formats **Integration with existing BI tools** If you use Tableau or Power BI for advanced analytics: - Mammoth prepares and cleans data - Export the prepared data to Tableau or Power BI for complex visualizations ## Common manager questions ### "How do I know if my team is actually using the platform?" **Check the Activity Log** - this is your primary indicator: - Look for pipeline creation in the first weeks - Multiple team members should be creating datasets, Views, and pipelines - Look for steady activity from most of your team **Measure displacement of manual processes**: - Are recurring reports now coming from Mammoth? - Has Excel use decreased for data prep? - Are team members mentioning it in status updates? **Talk to your team**: - Weekly 1-on-1s: "How's Mammoth working for you?" - Monthly team meeting: "What workflows have you automated?" - Anonymous feedback: Quarterly survey on adoption barriers ### "What if a team member leaves? How do we preserve their work?" **All work remains in the project** - it's not tied to individuals: - **Pipelines persist**: Other team members can view, edit, maintain - **Datasets remain**: Data doesn't disappear when someone leaves - **Dashboards continue**: Shared dashboards keep working **Best practice for transition**: 1. Before departure: Review Activity Log to see their key contributions 2. Assign pipeline ownership: Document who will maintain each workflow 3. Knowledge transfer: Hand off complex pipelines 4. Remove their access: Clean up permissions after departure **Tip**: Assign backup owners for critical pipelines before anyone leaves. Don't wait for departures to create this documentation. ## Next steps for managers After this guide you should have: - A project with you as Project Admin - Team members invited with the right roles - Governance settings configured - Activity Log reviews scheduled - A first executive dashboard **Next 30 days**: Fully automate one workflow with your team, record the result, and share it with leadership. **Related guides**: [Quick start](https://mammoth.io/docs/learn/getting-started/quick-start/), [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/), and [Getting started as a data analyst](https://mammoth.io/docs/learn/getting-started/as-a-data-analyst/). --- # Getting started as a technical user URL: https://mammoth.io/docs/learn/getting-started/as-a-technical-user/ · Updated: 2026-11-02 For technical users: validate SQL and large-data support, build reusable pipeline templates, and use window functions and automations to enable your team. This guide is for data engineers, BI developers, and analytics engineers who field frequent data requests from business users. It shows how to encode your logic as visual pipelines and templates that business users can run without writing code. Start with the technical assessment, then enable your first team member. ## Who this guide is for This path suits technical users who want to: - Enable stakeholders to handle routine transformations independently - Scale your expertise through reusable templates - Spend less time on routine stakeholder support - Maintain control through standardized processes and checkpoint approvals in pipelines - Build reusable template libraries for consistent team execution ### Goals by timeframe **Week 1**: First team member enabled, template library started, advanced features validated **Month 1**: Several team members handling routine requests on their own **Month 3**: A standardized template library in regular use The aim is to remove the repetitive requests that don't need your expertise, not all requests. ## Technical assessment Before investing in team enablement, validate that Mammoth meets your technical requirements. ### Test 1: Run an advanced SQL query The **AI SQL Query** function runs SQL queries directly on your data. Try an analytical query like this one, adapting the view and column names to your data: ```sql -- Your Test: Complex analytical query WITH monthly_revenue AS ( SELECT CAST(DATE_TRUNC('month', "order_date") AS TIMESTAMPTZ) AS month_ts, "customer_id", CAST(SUM("order_amount") AS NUMERIC) AS revenue_sum, CAST(ROW_NUMBER() OVER ( PARTITION BY "customer_id" ORDER BY DATE_TRUNC('month', "order_date") ) AS NUMERIC) AS customer_month_num FROM "View 1" WHERE "order_status" ILIKE 'completed' GROUP BY DATE_TRUNC('month', "order_date"), "customer_id" ), cohort_retention AS ( SELECT CAST(month_ts AS TIMESTAMPTZ) AS cohort_month, CAST(customer_month_num AS NUMERIC) AS customer_month, CAST(COUNT(DISTINCT "customer_id") AS NUMERIC) AS customers_count, CAST(SUM(revenue_sum) AS NUMERIC) AS cohort_revenue FROM monthly_revenue GROUP BY month_ts, customer_month_num ) SELECT * FROM cohort_retention ORDER BY cohort_month, customer_month ``` **Expected result**: If the query runs successfully, the function covers your analytical requirements. ![SQL Query panel with a cohort retention query applied to orders.csv, and the result grid showing cohort_month, cohort_revenue, and customers_count](https://mammoth.io/docs/images/20260408_154520_sql_query_complex.webp) ### Test 2: Check large dataset handling **Prerequisite**: A dataset with 100K+ rows. 1. Upload a dataset with 100K+ rows 2. Build a 5-task pipeline (Filter → Join → Group & Pivot → Calculate → Sort) 3. Execute and observe responsiveness **Expected result**: The pipeline executes without errors and the data grid stays responsive. ![Animation of a 100,000-row sales_data_2026.csv View with an 8-task pipeline of Bulk Replace tasks and Explore Cards above the grid](https://mammoth.io/docs/images/20260303_144923_Datagridshowing100K.webp) ## Week 1: Enable your first team member Teach a team member to do the work instead of doing it yourself. ### Select your first enablement target Choose based on these criteria: - **High request volume**: The person who asks you for help most often - **Strong motivation**: Someone eager to learn and reduce their dependency - **Representative work**: Their requests reflect common team patterns - **Excel proficiency**: They understand data concepts, just lack transformation tools **Example**: Sarah from Finance asks you monthly for performance reports by region. She knows Excel well and has asked if she could "learn to do this herself." ### Create your first template Turn a recurring request into a reusable template: **Step 1: Build the reference pipeline** Using **Sarah’s monthly performance report**, adapted for Hotel Occupancy: - Connect to hotel occupancy dataset (File Connection) - **Convert** `date` from text to Date (monthly reporting control) - **Filter** for reporting month (`2024-08-01`) - **Lookup** enrichment (region → hotel_id) for dimensional reporting - Apply **Math** function : `Vacant rooms = total_rooms - rooms_occupied` - **Group & Pivot** to structure the monthly performance view (COUNT aggregation) - **Sort** by revenue descending **Step 2: Document each transformation** Add a note (**Add note** in a task's menu) to pipeline tasks explaining: - **What** the transformation does - **Why** it's needed (business logic) - **When** to modify parameters (e.g., "change month filter here") ![Pipeline panel for the hotel occupancy dataset with Convert Column Type and Conditional Filter tasks, each with a note](https://mammoth.io/docs/images/20260408_154543_gold_standard_pipeline.webp) **Step 3: Save as a template** Use **Save as template** in the pipeline's versions menu and name it clearly: `Template: Hotel Occupancy Monthly Performance` You can also use **Copy pipeline** or **Copy tasks** to reuse tasks in another view. ### Train your team member **Session structure**: 1. **Walk through the template** - Explain each transformation - Show the business logic - Demonstrate how to read the results 2. **Guided practice** - "Now you change the month filter to last quarter" - Watch them execute the modification - Validate the output together 3. **Independent verification** - "Run this yourself without me watching" - Check for understanding, not perfection - Answer questions as they arise **Success criteria**: They can run the template independently and explain what each task does. ## Advanced transformations for technical users Beyond the point-and-click interface, Mammoth supports complex analytical workflows. ### 1. SQL Query with AI assistance The SQL Query function runs SQL directly on your data, with optional AI-assisted query generation. Write SQL directly, or describe your intent in the **Prompt** field, click **Generate SQL**, and let AI draft the query. Review and test generated queries before applying them. ```plaintext -- Use Case: Complex analytical queries beyond UI functions SELECT c.segment, DATE_TRUNC('quarter', o.order_date) AS quarter, COUNT(DISTINCT o.customer_id) AS active_customers, SUM(o.revenue) AS total_revenue, AVG(o.order_value) AS avg_order_value, PERCENTILE_CONT(0.5) WITHIN GROUP ( ORDER BY o.order_value ) AS median_order FROM orders o JOIN customers c ON o.customer_id = c.id WHERE o.order_status = 'completed' GROUP BY 1, 2 HAVING SUM(o.revenue) > 10000 ORDER BY quarter DESC, total_revenue DESC; ``` **AI capabilities:** - Generate SQL from natural language prompts - Accelerate query drafting and iteration - Assist with joins, aggregations, window functions, and filters **When to use SQL Query** - Complex joins and aggregations - Advanced analytical functions - Ad-hoc analysis **Best for**: Users who want complete flexibility. ![SQL Query panel with the prompt 'List all denim products and the stores where they were sold' and the generated SELECT query](https://mammoth.io/docs/images/20260408_154621_SQL_query_with_AI.webp) ### 2. Advanced join patterns **Scenario**: Multi-table consolidation across 4 or more data sources **Pipeline approach:** 1. Join Orders → Customers (left join on customer_id) 2. Join Result → Products (left join on product_id) 3. Join Result → Regions (left join on customer.region_id) **Result**: An enriched dataset with all dimensions **SQL approach**: 3 nested joins in one query Choose based on reusability (pipeline) or one-time analysis (SQL). ![Diagram of an Orders table joined by three LEFT JOINs to Customers, Products, and Regions, producing one enriched dataset](https://mammoth.io/docs/images/20260320_165455_image-1774000617896.webp) ### 3. Window function: pipeline-based analytics Apply ranking, trend, and moving calculations directly within the transformation pipeline, without writing SQL. The **Window function** transformation lets you: - Select function (Row Number, Dense Rank, etc.) - Define Group By (partition logic) - Define Sort (ordering logic) - Apply results into a new or existing column This creates modular, visible analytical tasks inside the pipeline. #### Example: Ranking within groups ```plaintext -- Equivalent SQL logic ROW_NUMBER() OVER ( PARTITION BY customer_id ORDER BY order_date ) ``` #### Example: Moving average ```plaintext AVG(order_value) OVER ( PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW ) ``` **When to use Window function** - Clear, task-by-task ranking logic - Repeatable workflows - Easier collaboration and review **Best for**: Structured analytical workflows where visibility and maintainability matter. ![Window function panel with Dense rank selected, grouped by customer_age, limited to 20 rows, writing to a new column named Result](https://mammoth.io/docs/images/20260408_154642_window_function.webp) ### 4. Automations for end-to-end workflows Automations can run a workflow from data refresh through transformation to delivery. #### Nightly data pipeline example **Step 1: Create a Dataset Refresh automation** - Schedule: for example, nightly - Source: Database via Live Connection (Salesforce, PostgreSQL, etc.) **Step 2: Add a pipeline to the Dataset** - Transformation tasks execute automatically after each refresh - Example tasks: Filter → Join → Group & Pivot → Calculate - Pipeline runs without manual intervention **Step 3: Configure export destinations** - Send transformed data to PostgreSQL, BigQuery, or other destinations **Step 4 (optional): Deliver by email** - A Messaging automation emails a view on a schedule - CSV attachments are limited to 100,000 rows in total across all attached views (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)) **Expected result**: A data pipeline that runs without manual intervention. For large datasets, use Draft Mode to batch your changes. Filter early in your pipeline to reduce data volume for subsequent transformations. ## Building your template library Templates scale your expertise across the organization. ### High-value templates to create **1. Retail transactions report** Template: `Store_Transactions_Analysis` Transformations (10 tasks): - Filter to relevant departments and categories - Calculate derived metrics (e.g. Total Value from Quantity and Price) - Standardize categorical values using Bulk Replace - Adjust and enrich date columns - Extract date parts for time-based segmentation (e.g. Quarter) - Normalize text fields to consistent casing - Limit dataset scope before aggregation - Apply conditional labels based on business rules - Aggregate by key dimensions using Group & Pivot - Rank records using Window Function for prioritization reporting **Dataset**: Point-of-sale transaction data **Output**: Aggregated, ranked, and enriched dataset ready for reporting [Video: Watch on YouTube](https://www.youtube.com/watch?v=oungCUkp2ys) ## Advanced use cases ### Scenario 1: Multi-source data consolidation **Problem**: Several regional databases and SaaS tools need unified reporting **Solution**: - A Live Connection for each regional database - Connectors for the SaaS tools (for example, Salesforce) - Consolidation pipeline (standardize schemas across sources) - Master dataset (single source of truth) - Automated nightly refresh via an automation **Result**: An executive dashboard with data from all sources **Team impact**: Business users create their own analysis Views from the master dataset ### Scenario 2: Customer 360 view **Problem**: Customer data fragmented across several systems **Solution**: - Join pipeline combining the data sources - Remove Duplicate Rows for unified customer records - Scheduled refresh maintaining current state **Result**: A single customer master dataset **Team impact**: The sales team creates its own customer insights ## Beyond month 1 **Months 2 to 3: advanced patterns** - Custom transformation workflows for complex business logic - Automation that runs related Dataset Refreshes in a sequence - Performance optimization for large datasets **Months 4 to 6: organizational impact** - Best practices documentation - Governance through project roles and pipeline checkpoints that pause for approval - Internal training for new team members ## Next steps 1. Complete technical validation 2. Identify your first team member to enable 3. Create your first template 4. Conduct a training session 5. Monitor and support with regular check-ins Related guides: [Quick start](https://mammoth.io/docs/learn/getting-started/quick-start/), [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/), and [Getting started as a manager](https://mammoth.io/docs/learn/getting-started/as-a-manager/). --- # Core concepts URL: https://mammoth.io/docs/learn/getting-started/core-concepts/ · Updated: 2026-11-02 Definitions of the seven core Mammoth concepts: Workspace, Project, Dataset, Batch, View, Pipeline, and Task, and how they nest and work together. Every platform has its own vocabulary. In Mammoth, Mammoth uses seven core concepts: Workspace, Project, Dataset, Batch, View, Pipeline, and Task. They describe how Mammoth organizes data work. This page is for new users. It defines each concept with examples and explains how they work together. To build a pipeline right away, go to the [Quick start](https://mammoth.io/docs/learn/getting-started/quick-start/). ![Seven nested levels: Workspace, Project, Dataset, Batch, View, Pipeline, Task, each with its container and security level](https://mammoth.io/docs/images/20260324_054812_mammoth-hierarchy-wireframe.webp) ## Workspace: Your organization's container A **Workspace** represents your entire organization's Mammoth environment. When you sign up, you create or join a Workspace. It's where billing and subscription are managed, users are invited and given permissions, global settings are configured, and all Projects live. ### Workspace characteristics Your Workspace is tied directly to your subscription plan and billing. The Workspace Owner has full administrative control over the environment, including managing users, billing, and security settings. Members have defined roles—Owner or Member—with specific permissions for each level. Complete isolation from other Workspaces creates a secure data boundary for your organization. Each Workspace can contain multiple Projects, and you can see your storage allocation in the interface (like "1.49GB / 2.1GB used"). **Real-world analogy**: Like a Google Workspace or Slack Workspace—your company's dedicated environment. ### Workspace roles and permissions For the complete table of what each role can do, see the [roles and permissions matrix](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix). **Workspace Owner** has complete administrative control including: - Billing management and subscription plan changes - Invite, remove, and manage all workspace members and their roles - Assign users to projects, including projects they're not part of - Manage workspace API tokens and external API keys **Workspace Member** capabilities: - Can create projects and view the Activity Log - Can be added to projects by Project Admins - Cannot invite users to the workspace - Full collaboration capabilities within assigned projects ### When you work with a Workspace You'll work with your Workspace during initial account setup, when adding or removing team members, managing billing and subscription, or viewing cross-project activity if you're an administrator. ![Workspace Settings General tab showing data usage, current plan, and the list of Projects](https://mammoth.io/docs/images/20260410_081643_WorkspaceSettingspanel.webp) ## Project: Isolated area within a Workspace A **Project** provides an isolated area within your Workspace for a specific team, department, or initiative. Each Project contains Datasets specific to that project's purpose, Live Connections scoped to project security, shared team members with project-level permissions, and independent settings and configurations. ### Project data isolation and security Projects provide security boundaries—one project cannot see another's data. Live Connection credentials are stored per-project, ensuring sensitive database access is controlled at the team level. Multiple users can work in the same project with defined permissions like the Project Admin or Project Editor roles. **Real-world analogy**: Like folders in Google Drive, but with security boundaries. ### Project roles and permissions **Project Admin** (assigned automatically to the user who creates the project): - Rename or delete the project - Add workspace members to the project, invite external users, and remove users - Create, update, or delete Live Connections - All Project Editor capabilities **Project Editor**: - Add, edit, or delete datasets, views, and pipelines - Create or modify queries from Live Connections - Cannot manage project settings or users ### Common Project organization patterns Teams typically organize Projects by department ("Marketing", "Finance", "Operations"), by initiative ("Q4 Sales Analysis", "Customer Churn Study"), or by data source ("Salesforce Data", "Financial System Data"). Create Projects based on data access requirements, not just organizational structure. If two teams need the same database credentials, they should share a Project—separate Projects mean maintaining duplicate credentials. ![Data Library with the Projects menu open, listing Marketing, Samples, Sales_2026, and a New Project option](https://mammoth.io/docs/images/20260324_055543_Projectsidebarnavigation.webp) You can also view the Project list in Workspace Settings. ![Workspace Settings General tab with a Projects table listing name, content, last updated, and users](https://mammoth.io/docs/images/20260324_060029_project_list.webp) ## Dataset: Standardized data container A **Dataset** is the result of importing data into Mammoth—your working data in standardized form. When you upload a CSV, connect to a database, or pull from an API, Mammoth creates a Dataset complete with schema (column names, data types, validation rules), metadata (source information, import history, row counts), batch collection (one or more data versions), and audit trail (complete lineage tracking). ### Datasets are source-agnostic Datasets are source-agnostic—CSV files, database queries, and API responses all become Datasets. Mammoth is schema-aware, understanding column types and validating data automatically. Datasets are versioned through multiple Batches, and data is stored persistently and securely in Mammoth's cloud infrastructure. ### Dataset operations You can create Datasets using multiple sources, including file uploads, clipboard data, connectors, URLs, webhooks, sample files, or by generating data with AI. Once created, you can manage data using batch operations such as combine, replace, remove, or suspend. Create Views to transform and explore your data, and export datasets to supported destinations after processing is complete. ![New Dataset dialog on the Generate with AI option, with a generated manufacturing sensor table and Create new dataset button](https://mammoth.io/docs/images/20260408_154753_dataset_creaiton.webp) ## Batch: Data version within a Dataset Each time data is added to a Dataset, it creates a **Batch**. Batches enable version control by tracking data changes over time, comparison by analyzing differences between time periods, rollback to return to previous data states if needed, and audit trails maintaining complete history of data imports. ### Batch characteristics Each Batch has a unique identifier and timestamp, preserved source information, tracked row count and metadata, and can be combined, replaced, removed, or suspended based on your needs. ### Batch operations explained **Replace** mode means new data overwrites old—typical for monthly data refreshes. **Combine** mode appends new data to existing data, perfect for cumulative datasets. **Delete** removes a batch, while **Suspend** hides it from all associated views without deleting its data. **Real-world analogy**: Like Git commits for your data—every import is tracked and reversible. ### Common Batch patterns Monthly sales reports might have 12 batches per year, with each batch representing one month. Daily transaction feeds could have 365 batches per year in combine mode. One-time historical imports use a single batch with replace on refresh. ![Dataset panel for Multi-Store_Retail_Sales.csv with a Batches table listing three active batches of 51 rows each](https://mammoth.io/docs/images/20260408_155041_Batch_combine.webp) Use Replace mode for reports that need only the latest data. Use Combine mode when building historical datasets over time. Choose based on your analysis requirements. ## View: Your interactive transformation workspace A **View** is where you interact with your data. It displays all batch data combined by default, provides an interactive data grid for sorting and filtering, shows Explore Cards for automatic profiling, includes a Metrics Panel for calculations, and contains a Pipeline for building transformations. ### Views as the starting point for work Every Dataset opens in a default View, but you can create multiple Views from one Dataset. Views are non-destructive—changes don't affect source data. Views operate in two modes: display-only changes (like renaming columns or formatting) are temporary and not saved to pipelines, while Pipeline Tasks create automated, reusable transformations. ### Display changes versus Pipeline Tasks New users often confuse the two. View-level changes (Display changes) modify how data is presented within a specific View. These changes are saved with the View and persist when the View is reopened, but they do not alter the underlying dataset. They are intended for readability, exploration, and analysis within that View only. Pipeline Tasks transform the actual dataset. They create reusable, automated transformation logic that persists across data refreshes, can be reused across multiple Views, and are included in automation and production workflows. **When to use each**: Use view level changes when you want to improve clarity, formatting, or interpretation for a particular View. Use Pipeline Tasks when creating reusable transformation logic for production workflows. **Real-world analogy**: A View is like an Excel sheet with saved formatting, filters, and calculated columns.\ A Pipeline Task is like a Power Query or ETL operation that permanently reshapes the data before anyone opens the sheet. ![View with a Pipeline panel of three tasks (Bulk Replace, Remove Duplicate Rows, Conditional Filter) beside the data grid and Explore Cards](https://mammoth.io/docs/images/20260408_155255_three-task-in-pipeline.webp) ## Pipeline: Automated transformation sequence When you perform transformations in a View, they're added to the **Pipeline** as Tasks. The Pipeline is sequential (tasks execute top-to-bottom in order), reusable (apply same logic to new data automatically), auditable (every task documented and reviewable), editable (modify, reorder, or remove tasks anytime), and previewable (see results at each task). ### Build once, run on every refresh New data automatically flows through the same Pipeline, eliminating manual repetition and ensuring consistency. ### Pipeline execution modes: immediate and Draft Mode **Immediate execution** (default) runs each task as you add it and shows results in real time, which suits iterative development. **Draft Mode** queues your changes as **Pending Updates** that run together when you click **Apply now**, which suits large datasets, complex workflows, and testing before committing changes. **Real-world analogy**: Like a recipe—write once, cook many meals. ### Common Pipeline patterns Data cleaning pipelines typically follow this pattern: Filter → Remove duplicates → Standardize values → Convert types. Data combination workflows use: Join datasets → Select columns → Calculate derived fields. Reporting preparation might include: Filter to period → Aggregate by group → Pivot for layout. ![Pipeline panel in reorder mode with a warning that reordering tasks may affect data, listing three tasks with drag handles](https://mammoth.io/docs/images/20260408_155154_reorder-tasksinpipeline.webp) Start building pipelines in immediate execution mode to see results instantly. Once you've validated the logic, switch to Draft Mode when processing large datasets—this batches your changes so they run together. ## Task: Individual transformation operation Each transformation you apply creates a **Task**—a single transformation operation within a Pipeline. Tasks are atomic (one operation per task like filter, join, or calculate), configurable (parameters editable via Function Panel), ordered (position in pipeline determines execution sequence), and previewable (click to see before/after data state). ### Task categories The task picker opens from the **+** button (tooltip **Add a task**) and organizes functions into seven categories. **AI Powered** includes Generative AI, AI SQL Query, Extract Text, Bulk Replace, and Conditional Filter. **Filter Label & Replace** includes Conditional Filter, Remove Duplicate Rows, Show Top/Bottom Rows, Edit Cells, Label & Insert Values, Fill Missing Values, Bulk Replace, and Find & Replace. **Date Numeric & Text** includes date functions such as Add / Subtract Date Values, Math Function, Window function, Extract Text, Text Formatting, and Extract JSON. **Reshape Group & Pivot** includes Group & Pivot and Unpivot. **Column Management** includes Add Column, Copy Columns, Combine Columns & Text, Convert Column Type, Split Into Multiple Columns, and Remove Column. **Unify** includes Join, Lookup, and Send to Dataset. **Controls** includes Data Check and Checkpoint Alert. To describe a transformation in plain language instead, use **Describe your transformation** in the picker. ### Function Panel for configuring a Task When editing a Task, the Function Panel appears showing task configuration options, real-time preview of results, AI-powered suggestions where available, and validation with error messages. This visual interface removes the need for coding. **Real-world analogy**: Like a single operation in an Excel formula, but visual and reusable. ![Conditional Filter Function Panel set to keep rows where store_name is Fashion Central or Chic Boutique, with Apply button](https://mammoth.io/docs/images/20260408_155131_filter_config.webp) ## How concepts work together The seven concepts nest inside one another, as the following example and table show. ### Complete workflow example with all seven concepts This scenario uses all seven concepts: 1. **Workspace**: "Acme Corp" (your company) 2. **Project**: "Q4 Sales Analysis" (your team's area) 3. **Dataset**: "Salesforce Opportunities" (imported data) 4. **Batch**: "December 2024 Import" (this month's data) 5. **View**: "Sales Pipeline Analysis" (your workspace) 6. **Pipeline**: 5 Tasks transforming the data 7. **Tasks**: Filter → Remove Duplicates → Join → Calculate → Pivot ### Data flow summary Data flows from source through Mammoth like this: Data Source → Import → Dataset (with Batches) → View (with Pipeline of Tasks) → Export/Dashboard. ![Data flow diagram: Data Source to Dataset with Batches, to View, to a Pipeline of five Tasks, to Export or Dashboard](https://mammoth.io/docs/images/20260324_054951_Dataflowdiagramshowing.webp) ### Concept hierarchy summary This table shows how the concepts nest within each other: | Level | Container | What it holds | Security boundary | Primary roles | | --- | --- | --- | --- | --- | | 1 | Workspace | Projects | Organization-level | Workspace Owner, Member | | 2 | Project | Datasets, Live Connections | Team/department-level | Project Admin, Project Editor | | 3 | Dataset | Batches | Data-level | Project members | | 4 | Batch | Rows of data | Version-level | Project members | | 5 | View | Pipeline | Transformation-level | Project members | | 6 | Pipeline | Tasks | Workflow-level | Project members | | 7 | Task | Single operation | Task-level | Project members | ## Common questions about core concepts ### Where is my data stored? Your data is stored in your Workspace, organized by Project → Dataset → Batch, in Mammoth's cloud infrastructure. ### What's the difference between a Dataset and a View? A Dataset is the imported data container—the raw or source data. A View is the interactive workspace where you explore and transform that data. One Dataset can have multiple Views, each with different transformation logic. ### Why do I need Projects? Projects provide security boundaries and organization. The Marketing team can't see Finance's data, and Live Connection credentials are scoped to Projects for data security. This ensures sensitive information stays within appropriate teams. ### What happens to my Pipeline when I add new data? New Batches automatically flow through the existing Pipeline. Your transformation logic is reused without any manual work—this is the core automation benefit of Pipelines. ### Can I have multiple Pipelines on the same Dataset? Yes! Create multiple Views from one Dataset, each with its own Pipeline for different purposes. For example, one View for executive reporting and another for detailed analysis. ## Industry-specific examples ### Financial services **Scenario**: Monthly regulatory reporting ```plaintext Workspace: First National Bank Project: SOX Compliance Dataset: General Ledger Transactions Batch: December 2024 (Replace mode) View: Regulatory Report View Pipeline: Filter → Categorize → Validate → Aggregate Tasks: Remove test transactions, categorize by account type, validate amounts ``` ### Manufacturing **Scenario**: Production quality tracking ```plaintext Workspace: Acme Manufacturing Project: Quality Control Dataset: Production Line Data Batch: Daily production runs (Combine mode) View: Quality Metrics Dashboard Pipeline: Calculate defect rates → Flag outliers → Trend analysis Tasks: Math functions for percentages, conditional filters for thresholds ``` ### Hospitality **Scenario**: Multi-property revenue analysis ```plaintext Workspace: Hotel Chain Corp Project: Revenue Management Dataset: Property Management System Data Batch: Nightly revenue reports (Replace mode) View: Executive Revenue Dashboard Pipeline: Combine properties → Calculate RevPAR → Compare periods Tasks: Union operations, math functions, pivot tables ``` ## Security and compliance summary Mammoth's hierarchical structure provides multiple layers of security: - **Workspace isolation**: Complete separation between organizations - **Project boundaries**: Teams cannot access each other's data - **Live Connection scoping**: Database credentials secured at project level - **Role-based permissions**: Workspace Owner and Member roles, and Project Admin and Project Editor roles, with specific capabilities - **Activity Log**: Workspace activity is recorded in the [Activity Log](https://mammoth.io/docs/learn/monitor/activity-log/) ## Next steps Now that you understand Mammoth's core concepts, you're ready to start using the platform. **Quick start**: See these concepts in action by building your first workflow → [Quick start guide](https://mammoth.io/docs/learn/getting-started/quick-start/) **Roles and permissions**: Role-based access control in detail → [Roles and permissions matrix](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix) **Draft Mode**: Execution modes and performance → [Draft Mode in the Pipeline](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/#draft-mode) **Your first pipeline**: Hands-on tutorial with transformations → [Build your first pipeline](https://mammoth.io/docs/learn/getting-started/first-pipeline/) **Glossary and limits**: Look up a term or check a limit → [Glossary](https://mammoth.io/docs/learn/glossary/) and [Limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/) --- # Your first pipeline URL: https://mammoth.io/docs/learn/getting-started/first-pipeline/ · Updated: 2026-11-02 Build your first data transformation pipeline in Mammoth with step-by-step guidance from data upload to automated workflow. This tutorial is for new Mammoth users. It walks you through building your first pipeline, from loading data to applying transformations. By the end, you'll have a three-task pipeline that filters, standardizes, and calculates new values from the sample data. The same approach turns other data cleanup work into a repeatable pipeline. ![Diagram of a pipeline: raw data passes through Filter, Standardize, and Calculate tasks to produce clean data](https://mammoth.io/docs/images/20260324_061547_Completepipelineworkflowdiagram.webp) ## Before you begin ### What you'll learn in this tutorial In this tutorial, you'll learn how to: - Upload or connect to a data source - Add your first transformation from the transform picker - See results as you build - Create multi-task pipelines that execute in sequence - Save your work for automated future use ### Prerequisites for the tutorial - A Mammoth account with Workspace access - Sample data (Mammoth provides a sample file) or your own data Each step includes a screenshot of what you should see and an expected result. ## Step 1: Load the Multi-Store Retail Sales data Before building a pipeline, you need data to transform. You can start with a Mammoth sample file or your own file. ### Option A: Use the sample data (recommended for first time) 1. Open any Project in your Workspace 2. Click **New Dataset** 3. In the New Dataset dialog, click **Sample Files** 4. Select the **Multi-Store Retail Sales** dataset 5. Click **Create new dataset**. Mammoth creates a Dataset and opens a View. ![New Dataset dialog with Sample Files selected and the Multi-Store Retail Sales sample highlighted](https://mammoth.io/docs/images/20260305_061015_upload_via_sample.webp) The sample file contains retail sales data, so you can learn pipeline basics without preparing your own data. ### Option B: Upload your own file 1. Click **New Dataset** in the Project 2. Select your Excel, CSV, or other supported file 3. Wait for the upload to complete 4. Mammoth creates a Dataset and opens a View ![New Dataset dialog on the Upload option with Upload file and Upload folder buttons and a file drop area](https://mammoth.io/docs/images/20260305_061112_upload_file.webp) Start with the sample data for your first pipeline, then apply the same techniques to your own data. ### What the View shows after loading data After you load data (sample or your own) and open the Dataset, your screen displays: - **Data grid** showing your data like a spreadsheet - **Pipeline panel** on the left (empty for now—this is where your transformations will appear) - A **+** button (tooltip **Add a task**) that opens the transform picker - **Explore Cards** above the data grid showing column distributions ![Freshly loaded View with an empty Pipeline panel showing only Source and the plus button, and Explore Cards above the data grid](https://mammoth.io/docs/images/20261009_092922_View_empty_pipeline_explore_cards.webp) **Expected result:** The grid shows data rows and the Pipeline panel shows "Pipeline (0)". You're ready for Step 2. ## Step 2: Add a Conditional Filter task for high-revenue orders This step filters the data to show only orders with a total revenue over 100. ### Open the transform picker 1. Click the **+** button (tooltip **Add a task**) 2. The transform picker opens with a search box (**Describe your transformation**) and the transformation categories 3. The categories are **AI Powered**, **Filter, Label & Replace**, **Date, Numeric & Text**, **Reshape, Group & Pivot**, **Column Management**, **Unify**, and **Controls** ![Task picker opened from the plus button in the Pipeline panel, with the search box, the category list and the Filter, Label & Replace category expanded to show Conditional Filter and Remove Duplicate Rows](https://mammoth.io/docs/images/20261009_092921_Task_picker_filter_label_replace.webp) ### Navigate to the Conditional Filter function 1. Click the **Filter, Label & Replace** category 2. Scroll through the function list to find **Conditional Filter**, or type its name in the search box 3. Click **Conditional Filter** 4. The Function Panel opens at the bottom of your screen ### Configure the Conditional Filter Set up the filter logic in the Function Panel: 1. **Column to filter**: Click the dropdown and select **total_revenue**(or similar revenue column) 2. **Condition**: Select **is greater than** from the operator dropdown 3. **Value**: Enter **100** in the numeric field 4. **Filter type**: Keep **Show** selected (this keeps rows matching your condition) ![Conditional Filter Function Panel set to keep rows where total_revenue is greater than 100](https://mammoth.io/docs/images/20260305_053837_Filter_rule.webp) The Function Panel shows a clear summary of what will happen: "Show rows where total_revenue is greater than 100." ### Apply the Conditional Filter 1. Click the **Apply** button in the Function Panel 2. The Function Panel closes automatically 3. The Pipeline panel on the left now shows: **"1. Conditional Filter"** 4. Your data grid updates to show only orders with total_revenue over 100 5. Notice the row count at the bottom changes (you'll see fewer rows now) ![View with one Conditional Filter task in the Pipeline panel and the grid reduced to 20 rows](https://mammoth.io/docs/images/20260305_053928_filter_applied.webp) ### What the Conditional Filter did You've created your first reusable transformation: - The filter logic is saved in your pipeline as a task - The pipeline executed automatically (because Draft Mode is off by default) - Your data now shows only high-value orders - Most importantly: this filter will automatically apply to any future data you add to this Dataset **Expected result:** The Pipeline panel shows one task, and the data grid displays fewer rows than before, all with total_revenue values above 100. ## Step 3: Standardize product names with Bulk Replace This step standardizes text values that have slight variations. Use **Bulk Replace** to detect and standardize variations in the `product_name` column. --- ### Open Bulk Replace 1. Click the **+** button 2. Go to **Filter, Label & Replace** 3. Select **Bulk Replace** The Bulk Replace panel opens. --- ### Detect product name variations in Bulk Replace 1. Select **product_name** in the **Selected column** dropdown 2. Open the **Group Suggestions** tab 3. Under **Grouping Settings**, choose a grouping method: - **Smart** - **Similarity**: Groups based on calculated similarity - **Spelling Match**: Groups spelling variations - **Common Patterns**: Groups by shared word patterns 4. Review the group suggestions Each group shows: - Suggested grouped values - The number of occurrences - A **+** icon to create a replace rule To proceed: - Click **+** for individual groups, or - Select **Create all Group Suggestions** to generate all rules at once. You can also move values between groups and remove groups you don't want. --- ### Review and adjust the Bulk Replace groups 1. Edit the standardized value if needed 2. Remove any group that should not be merged --- ### Apply Bulk Replace 1. Click **Apply** The system updates the data grid with standardized `product_name` values based on the groupings. --- ### Result of Step 3 The **Pipeline panel** now includes: 1. Conditional Filter 2. Bulk Replace Your product names are now standardized. ![View with a Conditional Filter task and a Bulk Replace task on product_name in the Pipeline panel](https://mammoth.io/docs/images/20260305_054426_filter_bulk_replace_two_task_applied.webp) ## Step 4: Add a Gross_Sale column with Math Functions This step creates a new column with calculated values: gross sales based on quantity and unit price. ### Open Math Functions 1. Click the **+** button 2. Navigate to the **Date, Numeric & Text** category 3. Select **Math Functions** 4. The Function Panel opens for mathematical operations ![Math Function panel with an expression box, Apply results into New Column option, and a New Column Name field](https://mammoth.io/docs/images/20260305_061817_math_function.webp) ### Configure the Gross_Sale calculation 1. **New Column Name**: Enter **"Gross_Sale"** 2. **Formula**: Build your calculation using column names and operators - Example: `quantity_sold * unit_price` 3. Review the formula preview showing sample calculations 4. Click **Apply** ![Animation of entering a math expression and a new column name, then applying the Math Function task](https://mammoth.io/docs/images/20260324_092107_math_pipeline.webp) Your pipeline now has three tasks, and the data grid shows your new Gross_Sale column with calculated values for every row. ![View with three tasks in the Pipeline panel and a new Gross_Sale column in the data grid](https://mammoth.io/docs/images/20260305_062002_three_rules_view.webp) **Expected result:** The Pipeline panel displays three tasks, and scrolling right in the data grid reveals your new calculated column. ## How the three-task pipeline runs Your pipeline is a sequence of three transformations that execute in order. ### Pipeline structure ```plaintext Pipeline (3) ← Total number of tasks ├── 1. Conditional Filter ← First task (executes first) │ total_revenue> 100 │ Rows filtered │ ├── 2. Bulk Replace ← Second task (executes second) │ product_name variations grouped │ Result: Names standardized │ └── 3. Math Functions ← Third task (executes last) Create Gross_Sale column Result: New column added ``` ### How tasks execute When you run the pipeline (or when it runs automatically), Mammoth: 1. Starts with your original data 2. Applies Task 1 (Conditional Filter) → creates intermediate result 3. Takes that result and applies Task 2 (Bulk Replace) → creates another result 4. Takes that result and applies Task 3 (Math Functions) → creates final output This sequential execution means each task works with the output of the previous task—like a recipe where each task builds on the last. ### Task options in the Pipeline panel Hover over any task in the Pipeline panel to see available options: ![Animation of hovering over a task in the Pipeline panel to reveal its options toolbar](https://mammoth.io/docs/images/20260324_092508_Pipelinepanelwithhover.webp) - **Edit**: Modify the task's configuration (reopens Function Panel) - **Preview Data at this Task**: See what the data looks like after this specific task (without later tasks) - **Paste below**: Add a new transformation below the selected task - **Add note**: Document why you added this task (business logic notes) - **Duplicate**: Create a copy of this task - **Delete**: Remove the task from the pipeline - **Suspend**: Suspend the task from pipeline - **Rename**: Rename a task in the pipeline ### Reordering tasks in the Pipeline You can drag and drop tasks to change execution order: 1\. Click on the **Reorder** icon from the top toolbar in the pipeline 2\. Hover over a task in the Pipeline panel 3\. Click and hold the drag handle (⋮⋮ icon) 4\. Drag up or down to the new position 5\. Release to drop 6\. Click on **Reorder Tasks** **Important:** Mammoth validates dependencies automatically. If Task B uses a column created by Task A, you cannot move Task B before Task A. The system will show a warning and prevent the reorder. ![Animation of dragging tasks in the Pipeline panel to reorder them, with a warning that reordering may affect data](https://mammoth.io/docs/images/20260324_090629_reorder-tasks_1-test.webp) ## Reviewing the results of the pipeline ### Before and after comparison **Starting point:** - All rows with various revenue values - Brand values with variations - No Gross_Sale calculation **After your pipeline:** - Only rows where total_revenue > 100 - Standardized product values - New Gross_Sale column showing calculated totals ![Two stacked screenshots of the View: the source data with 51 rows above, and the transformed data with 20 rows and a Gross_Sale column below](https://mammoth.io/docs/images/20260324_090814_Splitviewcomparison.webp) The screenshot compares the original data on top with the transformed data on the bottom (20 rows, clean names, and 20 columns including Gross_Sale). ### Verify the pipeline results Use these methods to confirm everything worked correctly: **Check the Metrics Panel** (right side): - Shows row count changes - Displays summary statistics - Updates dynamically with each transformation **Scroll through the data grid:** - Verify total_revenue values are all above 100 - Check product_name for consistency - Look at Gross_Sale calculations **Use "Preview Data at this Task":** 1. Hover over any task in the Pipeline panel 2. Click on **Preview x rows** from any task 3. See exactly what the data looked like after that task 4. Useful for debugging multi-step pipelines Checking each task in turn shows where an issue occurs if results don't match expectations. ## Saving and reusing the pipeline Your pipeline is saved automatically. ### The pipeline is already saved Every task you add gets saved immediately to this View. There's no separate "save" button to remember. This means: - Your pipeline persists in this View permanently - You can close the browser and come back later - Other team members with View access see the same pipeline - The pipeline won't be lost if your browser crashes ### What you can do with the pipeline After you build a pipeline, you can: **Apply to new data automatically:**\ When you add new batches of data to this Dataset, your pipeline runs automatically, applying the same transformations. This means next month's data gets filtered, standardized, and calculated exactly the same way, with no manual work. **Create a dashboard:** 1. Click **Create** to open **What do you want to build?** 2. Pick your transformed data under **With my data**. Mammoth shows starting points based on your columns and dates, or you can describe what you want 3. Choose a starting point or describe your dashboard **Export your transformed data:** 1. Click the **Export** button 2. Choose your format: Excel, CSV, live link, database, or cloud storage 3. Your transformed data exports ready for use in other tools **Schedule automatic refresh:** 1. Set up automation to refresh your data on a schedule 2. Your pipeline runs automatically with each refresh 3. Transformed data stays current without manual intervention ![Export menu for View 1 listing Mammoth managed, Send to Dataset, Live link, Databases, and External destinations](https://mammoth.io/docs/images/20260324_091329_ViewinterfaceshowingExport.webp) ![Publish as Dashboard dialog showing three Dashboard Suggestions and a field to describe your own dashboard](https://mammoth.io/docs/images/20260324_091403_ViewinterfaceshowingDashboard.webp) ### Next steps after the first pipeline Now that you understand pipeline basics, you can: - **Try Describe your transformation**: Click **+**, describe what you want in plain English in the search box, and let AI build the task for you - **Explore more transformations**: The transform picker has functions for date operations, text formatting, joining data, and more - **Build production pipelines**: Apply these techniques to your real business data - **Set up Automations**: Configure Automations to run pipelines on schedules For large datasets, turn on Draft Mode before adding multiple tasks. This lets you build your entire pipeline first, then execute all tasks at once instead of processing after each addition. ## Common first-pipeline problems and solutions These are the issues new users encounter most often. ### Problem 1: "my transformation didn't work" **Symptoms:** You added a task, but the data didn't change **Solution:** Check if Draft Mode is ON. When Draft Mode is enabled, tasks appear in the Pipeline panel but don't execute until you click **Apply now** at the bottom of the Pipeline panel. Look for a blue indicator on tasks—this means they're drafted but not executed. ![Pipeline with Draft mode ON, a Copy Columns task marked New, and a Pipeline has Pending Updates bar with Apply now](https://mammoth.io/docs/images/20260305_062339_challenge1.webp) ### Problem 2: "I don't see the column I need" **Symptoms:** Your required column doesn't appear in dropdown menus **Solution:** Check the pipeline task order. If Task B creates a new column, and Task A tries to use that column, Task A can't find it yet. Reorder your tasks so the column-creating task comes first. Alternatively, add the task that creates the column earlier in your pipeline. ### Problem 3: "data looks wrong after my transformation" **Symptoms:** Results don't match expectations after applying a task **Solution:** Use "Preview Data at this Task" to identify where things went wrong: 1. Hover over each task in sequence, click on **Preview X rows** 2. It will show **Preview Data at this task** 3. Find the task where data became incorrect 4. Edit that specific task to fix the issue This technique lets you isolate problems in complex multi-task pipelines without deleting everything. ### Problem 4: "I want to undo a transformation" **Symptoms:** You applied a task and want to remove it **Solution:** Delete the task from the pipeline: 1. Hover over the task in the Pipeline panel and click on More options(three dot menu) 2. Click the **Delete** icon (trash can) 3. Confirm deletion 4. The pipeline re-executes without that task, and your data reverts to the previous state ### Problem 5: "the Function Panel is confusing" **Symptoms:** You're not sure what parameters mean or how to configure a task **Solution:** Every parameter in the Function Panel has contextual help: - Hover over any field to see a tooltip explanation - Click the **(?)** icon next to parameters for detailed help - Use **Describe your transformation** in the transform picker if visual configuration feels overwhelming: describe what you want, and AI configures the task for you - For each transformation in the Function Panel, click the **Help (book icon)** to open the corresponding documentation page for detailed guidance. ## Quick reference for first pipelines ### Most common first transformations These are five transformations new users often need: 1. **Conditional Filter** - Remove unwanted rows based on criteria 2. **Bulk Replace** - Standardize text values with variations 3. **Convert Column Type** - Fix data types (text to number, text to date) 4. **Remove Duplicate Rows** - Clean duplicate records 5. **Math Functions** - Calculate new values from existing columns ### Pipeline best practices Follow these principles for successful pipelines: **Start with filters:**\ Reduce dataset size early by filtering out unnecessary rows. Smaller data makes later tasks faster. **Use Draft Mode for complex workflows:**\ If you're adding 5+ tasks, turn on Draft Mode. Build your entire pipeline, then execute once. This also helps you think through the full transformation logic before processing. **Add comments to tasks:**\ Document business logic, calculation formulas, or decision criteria. Future you (and your teammates) will appreciate the context. **Test with small data first:**\ If you have a large dataset, build and test your pipeline on a small sample file first, then apply it to the full dataset once it's working. --- You've built your first pipeline. The skills you practiced here (filtering data, standardizing values, and adding calculations) apply to many data preparation tasks. Next, read [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/), or explore the [Transform section](https://mammoth.io/docs/learn/transform/). --- # Getting started with Mammoth URL: https://mammoth.io/docs/learn/getting-started/ · Updated: 2026-11-02 Start with Mammoth Analytics. Choose a learning path for your role, learn the five core concepts, and follow the quick start to build your first pipeline. This section is for new Mammoth users, whatever their role. Start with the [Quick start](https://mammoth.io/docs/learn/getting-started/quick-start/), or choose a role-based path in [Choose your path](#choose-your-path). Mammoth lets business users prepare, transform, and share data independently, without waiting on IT. Mammoth is a single platform for the data journey, from messy source data to automated pipelines and shareable dashboards. [Video: Getting started with Mammoth](https://www.youtube.com/watch?v=VehQ0BtUO4s) ## The Mammoth data workflow: connect, transform, export Mammoth handles the data workflow in one platform: **Start**: Data that's messy, siloed, in multiple formats across systems\ **Middle**: Visual transformation without code through intuitive pipelines\ **End**: Clean datasets, automated workflows, and shareable AI-powered dashboards ![Three boxes in a row, Connect, Transform, and Export, joined by arrows to show the Mammoth workflow](https://mammoth.io/docs/images/getting-started/one_platform_journey.webp) ### What Mammoth provides **Accessibility** Built for business users, not just technical teams. Visual, no-code tools. **End-to-end capabilities** - **Connect**: connectors for databases, applications, and cloud storage - **Explore**: Automatic data profiling with Explore Cards - **Transform**: Visual pipeline development with a library of functions - **Analyze**: AI-powered transformations with natural language - **Share**: Export anywhere or create AI dashboards **Cloud-based security** Mammoth is cloud-based, so there is no infrastructure to run. It is SOC 2 Type II and ISO 27001 certified. See [Security and compliance](https://mammoth.io/docs/learn/security-overview/). Tip: start by automating one repetitive Excel workflow. ## Choose your path Your role shapes your journey. Choose the path that fits your needs: ### Path 1: Data analyst ![Portrait of Sam, the example data analyst persona](https://mammoth.io/docs/images/getting-started/sam.webp) **You need**: Automated Excel workflows and reports without asking IT **Key capabilities**: - File upload and data exploration - Visual transformations with no code required - Excel-familiar functions and operations - Automated reporting and scheduling [Getting started as a data analyst](https://mammoth.io/docs/learn/getting-started/as-a-data-analyst/) ### Path 2: Technical user ![Portrait of Jay, the example technical user persona](https://mammoth.io/docs/images/getting-started/jay.webp) **You need**: Repeatable workflows for your team and fewer support requests **Key capabilities**: - Live Connections to databases and APIs - Advanced transformations and multi-dataset joins - Pipeline templates for team collaboration - API integration for automation [Getting started as a technical user](https://mammoth.io/docs/learn/getting-started/as-a-technical-user/) ### Path 3: Manager ![Portrait of Jordan, the example manager persona](https://mammoth.io/docs/images/getting-started/jordan.webp) **You need**: Team visibility and self-sufficient operations **Key capabilities**: - Team collaboration and sharing - AI-powered dashboards for executives - Governance and permissions management - Usage monitoring and analytics [Getting started as a manager](https://mammoth.io/docs/learn/getting-started/as-a-manager/) ## Understanding core concepts Five concepts underpin Mammoth: ![Five boxes joined by arrows in order: Workspace, Project, Dataset, View, Pipeline](https://mammoth.io/docs/images/getting-started/core_concepts.webp) ### 1. Workspace, Project, and Dataset hierarchy Your organizational structure for data management. Workspace ties to your subscription, Projects create secure boundaries for different initiatives, and Datasets hold your actual data. This hierarchy keeps data organized and secure with project-scoped access. **Why it matters**: Prevents data sprawl and enables proper governance without complexity. [Learn more about data hierarchy](https://mammoth.io/docs/learn/getting-started/core-concepts/#workspace-your-organizations-container) ### 2. Views as your interactive workspace Where data exploration and transformation begins. Views provide point-and-click interfaces before you commit to automation, combining spreadsheet familiarity with analytics. **Why it matters**: Explore and validate transformations interactively before building automated workflows. [Learn more about Views](https://mammoth.io/docs/learn/getting-started/core-concepts/#view-your-interactive-transformation-workspace) ### 3. Pipelines as automated transformation Sequential tasks that transform your data automatically. Build once and it applies to every data refresh, so your Excel workflow becomes repeatable. **Why it matters**: Convert manual work into automated processes. [Learn more about Pipelines](https://mammoth.io/docs/learn/getting-started/core-concepts/#pipeline-automated-transformation-sequence) ### 4. Draft mode versus immediate execution Choose when transformations apply to your data. Draft Mode lets you batch multiple changes for testing, while immediate execution applies each change as you make it. **Why it matters**: Test complex logic safely before committing to large datasets. [Learn more about Draft Mode](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/#draft-mode) ### 5. Export and share Send data anywhere—BI tools, databases, dashboards, or downloads. Mammoth works alongside your existing tools. **Why it matters**: Mammoth complements your existing tools. [Learn more about exporting](https://mammoth.io/docs/learn/export-share/) Learn Views and Pipelines first, because the rest builds on them. Then add Live Connections, then the AI features. ## Key features for business users ### Explore Cards for data understanding Automatic visualization of every column with histograms, bar charts, and statistical distributions. Use them to understand data quality and patterns. **Use Case**: Spot data quality issues immediately after upload—missing values, unexpected distributions, outliers—before spending time on transformations. [Learn more about Explore Cards](https://mammoth.io/docs/learn/explore-discover/explore-cards-overview/) ### Describe your transformation in plain language The **Describe your transformation** box converts a natural language request into transformation tasks. Describe your goal without learning function names. **Use Case**: Complex multi-task transformations without technical expertise—"Remove duplicates, standardize vendor names, then join with budget data." [Learn more about AI capabilities](https://mammoth.io/docs/learn/transform/generative-ai/) ### Visual pipeline development Drag-and-drop transformation sequencing with a library of functions. See each task, understand the logic, and modify it. **Use Case**: Build repeatable workflows for recurring processes—monthly reports, weekly dashboards, daily data feeds. [Learn more about pipelines](https://mammoth.io/docs/learn/transform/) ### AI-powered dashboards Describe what you want to see and Mammoth generates a dashboard from your data, without BI tool training. **Use Case**: Executive reporting, stakeholder updates, and client dashboards that you can share. [Learn more about dashboards](https://mammoth.io/docs/learn/dashboard/) ### Live Connections Connections to databases, applications, and APIs that refresh your data without manual file downloads. **Use Case**: Scheduled reporting from sources such as Salesforce and databases, with automatic refresh scheduling. [Learn more about Live Connections](https://mammoth.io/docs/learn/connectors/) If you're coming from Excel, start with file uploads and Explore Cards. If you're coming from Alteryx or similar tools, go directly to Live Connections and advanced pipelines. ## Next steps and resources ### Immediate actions **1. Choose your path** Select the persona-based guide above that matches your role: - Business Analyst: Automate Excel workflows - Technical User: Enable team self-service - Manager: Standardize team operations **2. Quick start tutorial** Build your first pipeline with sample data. [Start the quick start tutorial](https://mammoth.io/docs/learn/getting-started/quick-start/) ### Learning resources **Core concepts** Detailed explanations of Mammoth's data hierarchy, terminology, and platform fundamentals. Essential reading for understanding how everything connects. [Read Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/) **First pipeline tutorial** Hands-on walkthrough with sample data covering data upload, exploration, transformation, and automation. [Build your first pipeline](https://mammoth.io/docs/learn/getting-started/first-pipeline/) ### Need help? **Support documentation** Troubleshooting guides, FAQs, and detailed feature documentation. Search for specific questions or browse by category. [Open the troubleshooting guides](https://mammoth.io/docs/learn/troubleshooting/) **Contact Support** Direct assistance from the Mammoth team for technical questions, implementation guidance, or account issues. [Contact Support](mailto:support@mammoth.io) **Schedule training** Team onboarding sessions, customized training programs, and implementation workshops are available. Request a session. [Request training](https://mammoth.io/docs/book-demo/) --- # Key features overview URL: https://mammoth.io/docs/learn/getting-started/key-features/ · Updated: 2026-11-02 Overview of Mammoth's seven core capabilities: pipelines, AI transformations, Explore Cards, Live Connections, AI dashboards, Automations, and export. This page summarizes the seven core Mammoth capabilities for anyone evaluating the platform or starting out. Each section names a capability and links to where to learn more. To try them in sequence, start with the [Quick start](https://mammoth.io/docs/learn/getting-started/quick-start/). ![Platform diagram: Live Connections and Automations extract data, Explore Cards, Pipelines and AI Transformations transform it, AI Dashboards and Export share it](https://mammoth.io/docs/images/20260324_054103_Mammothplatformoverview.webp) ## Visual pipeline development Build reusable pipelines from transformation functions in organized menus, without writing code. Select a function, configure it through a form, and see the results. Each pipeline task executes in order from top to bottom, which gives a transparent record of your transformation logic. ![Pipeline panel with Conditional Filter, Bulk Replace, Join, and Group & Pivot tasks, and the Cards Density menu set to Compact](https://mammoth.io/docs/images/20260324_052632_task_with_expand_collapse.webp) You can review any task, see the exact logic applied, and modify it without technical expertise. A pipeline you build once applies to new data. Examples are daily sales reports and monthly consolidations. Build pipelines with your actual messy data rather than clean examples. Transformation functions cover common data quality issues such as inconsistent formatting, duplicate records, and missing values. ## AI-powered transformations Describe what you want in natural language in the **Describe your transformation** box and Mammoth generates the pipeline tasks. For example, type "remove rows where product name contains 'test' and standardize dates to MM/DD/YYYY format" and Mammoth's AI generates the matching tasks. It can create multi-task workflows you would otherwise build manually through function menus. AI is also used in individual functions. The Extract Text function uses AI pattern recognition for unstructured data. AI-powered Bulk Replace groups variations like "iPhone 15 Pro," "iphone 15 pro," and "iPhone15Pro" for standardization. ![Empty Describe your transformation box in the View toolbar, showing its placeholder text, above the task categories](https://mammoth.io/docs/images/20261009_092923_Describe_your_transformation_box.webp) You can review, modify, schedule, and reuse the pipelines the AI creates. ## Explore Cards: column insights at a glance Every column in your dataset gets an automatic visualization and statistical summary when you open a View, with no configuration. Explore Cards are interactive and show distributions, patterns, and quality issues. Text columns display vertical bar charts of distinct values sorted by frequency. Numeric columns show horizontal bar charts with intelligent granularity (multiples of 10, 100, 1000). Date columns provide temporal charts with automatic hierarchy selection (years, months, days, hours). ![Animation of a Sales_2026 View with 51 rows and 19 columns, where the cursor hovers over a column header to open its Explore Card](https://mammoth.io/docs/images/20260324_052830_Explorecards.webp) Click any value in an Explore Card to highlight it with menu options. Double-click to create filter pills that update all cards and the data grid. Discoveries become repeatable processes, because you can convert temporary filters into permanent pipeline tasks. Each card also shows completeness statistics, null percentages, and distinct value counts. ## Live Connections to your data sources Connect directly to databases, cloud applications, and APIs without downloading files, so data stays current without manual exports. ![New Dataset dialog with Connectors selected, showing tiles for Amazon Redshift, Apache Hadoop, Databricks, Dropbox, Google Ads, and BigQuery](https://mammoth.io/docs/images/20260324_053035_Connector_screen.webp) A Live Connection is a configured link between Mammoth and a data source. Supported sources include Salesforce, PostgreSQL, Google Sheets, other databases, cloud applications, analytics platforms, and file sources. Credentials are encrypted and scoped to individual projects. You can combine multiple sources in the same pipeline, for example by joining Salesforce opportunities with PostgreSQL financial data and Google Sheets tracking. Schedule automatic data refreshes so reports reflect current data. For connectors that support it, set the **Update method** to **Add new data** with a **Key column** so only new data is added instead of reloading the entire dataset. ## AI-powered dashboard creation Describe the dashboard you want and Mammoth's AI generates an interactive dashboard with charts, metrics, and filters. The AI analyzes your data structure, identifies key metrics, and suggests different dashboard approaches, such as an executive summary or an analytical deep dive, so you can choose the one that matches your audience. ![Product Performance Dashboard with a Dashboard Assistant prompt, filters, revenue metrics, a revenue-by-category donut chart, and a brand bar chart](https://mammoth.io/docs/images/20260324_053211_Completeworkflowdiagram-1.webp) Share dashboards with **Anyone with the link** (no sign-in required, for external stakeholders) or **Sign-in required** (for your team). ## Automations Automations schedule, coordinate, and monitor data workflows that run without manual intervention. Schedule Dataset Refresh automations to pull updated data from Live Connections daily, weekly, or monthly. Use Data Consolidation automations to combine file uploads from multiple locations. Configure Messaging automations with email notifications and CSV attachments to deliver reports to stakeholders. Run related Dataset Refreshes **In a sequence** or **In parallel**. Track running and past runs in Monitor. ![Automation run: a Monday 6:00 AM trigger leads to Dataset Refresh, Pipeline Execution, Export to PostgreSQL, and Email Notification, each with a status](https://mammoth.io/docs/images/20260408_155500_Orchestrationworkflowdiagram.webp) Once set up, an automation runs on its schedule. ## Flexible export and sharing Export sends data to Mammoth-managed destinations or external systems. Mammoth supports two export paths. ### Mammoth-managed export destinations - **Send to Dataset**: Push results from your current view into a new or existing dataset for reuse. - **Live Link**: Generate a secure, shareable URL that automatically reflects the latest data. - **Managed Databases**: Publish directly to supported databases managed within Mammoth (e.g., PostgreSQL, BigQuery). ### External export destinations Export data to systems outside Mammoth, including: - Google BigQuery - PostgreSQL - MySQL - SQL Server - Amazon Redshift - Elasticsearch - SFTP - Azure Blob - OneDrive and SharePoint - Tableau Server/Cloud - REST API Export You can prepare and transform data once, then deliver it to operational databases, analytics environments, or external systems. A Live Link avoids file attachments and version confusion, because the link reflects current data. ![Animation of a 100,000-row sales_data_2026.csv View with a 6-task pipeline, where the cursor moves to the Export button](https://mammoth.io/docs/images/20260324_053512_mammoth_managed_export.webp) ![Export View 1 panel with Mammoth managed and External destinations sections, listing Google BigQuery, Elasticsearch, SQL Server, and MySQL](https://mammoth.io/docs/images/20260408_155529_external_destination_export.webp) ## How the capabilities work together The seven capabilities combine into a workflow from raw data to shareable insight. This illustrative example describes a manufacturing team. The team starts by connecting Live Connections to their SAP production database and quality management system. Explore Cards reveal many records with missing product categories. They build a visual pipeline that filters out test records, standardizes vendor names with AI-powered Bulk Replace, joins production data with quality metrics, and calculates defect rates by product line. They convert that exploration into an automation. Every Monday at 6 AM, a Dataset Refresh pulls updated data and the pipeline applies the same transformation logic to new records. An AI-generated dashboard shows production efficiency KPIs and quality trends. The dashboard is shared with **Sign-in required** for plant managers, who sign in to Mammoth to see current metrics. Results export to their existing BigQuery environment, where the data team performs deeper statistical analysis. ![Six-stage workflow from Live Connections to Export, with Authenticated and Public sharing modes under AI Dashboards](https://mammoth.io/docs/images/20260324_053843_Completeworkflowdiagram.webp) ## Capabilities at a glance | Feature | Primary benefit | Audience | | --- | --- | --- | | Visual pipelines | Automate recurring workflows | All users | | AI transformations | Natural language data work | Business analysts | | Explore Cards | Column profiling | All users | | Live Connections | Data refreshed from the source | Data engineers | | AI dashboards | Dashboards from a description | Business analysts | | Automations | Scheduled, coordinated workflows | Operations teams | | Export | Send data to other systems | All users | ## Next steps To try these capabilities, follow the [Quick start tutorial](https://mammoth.io/docs/learn/getting-started/quick-start/) to build your first pipeline, or read [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/) to see how the platform is organized. For feature detail, see [Transform data](https://mammoth.io/docs/learn/transform/) for pipelines, [Dashboards](https://mammoth.io/docs/learn/dashboard/) for visualization, and [Automations](https://mammoth.io/docs/learn/automations/) for scheduled workflows. --- # Quick start guide URL: https://mammoth.io/docs/learn/getting-started/quick-start/ · Updated: 2026-11-02 Build your first Mammoth pipeline with this hands-on tutorial: upload, explore, transform, and export a messy sales file. This hands-on tutorial is for new Mammoth users. It walks you through the core workflow (upload, explore, transform, and export) using a small sales file, and ends with a clean, exportable dataset. **What you'll accomplish**: Transform messy sales data with duplicates and inconsistent formatting into a clean dataset ready for analysis. **Prerequisites**: A Mammoth account ([sign up for Mammoth](https://mammoth.io/docs/signup/)) **Data**: A CSV file of sales orders with messy product names, mixed date formats, and duplicate rows (described in Step 1) ![Diagram of a pipeline: raw data passes through Filter, Standardize, and Calculate tasks to produce clean data](https://mammoth.io/docs/images/20260324_061100_Completepipelineworkflowdiagram.webp) ## Step 1: Upload the sales CSV as a Dataset This step gets the sales data into Mammoth. 1. Prepare a CSV file of sales orders, such as `sales_data_messy.csv`, with columns `product_name` and `order_date`: - Product names written in several variations - Dates in inconsistent formats - Duplicate entries 2. In Mammoth, click **Data** in the left sidebar to open the Data Library. 3. Click the **New Dataset** button at the top right of the Data Library. 4. In the New Dataset dialog, choose **Upload** 5. Drag your file into the drop zone and click **Submit** ![Animation of the empty Data Library: clicking New Dataset, choosing Upload, and adding a file](https://mammoth.io/docs/images/20260302_152934_upload-file.webp) **What just happened**: Mammoth imported your CSV and created a Dataset (a standardized data container). The data is now stored in your Project. Open the new dataset from the Data Library list to see it in a View. A View is your interactive workspace for exploring and transforming data. ![Data Library showing sales_data_messy.csv with 7 columns and 518 rows, a Preview, and an Upload complete message](https://mammoth.io/docs/images/20260408_155738_File_uploaded_data-lib.webp) ## Step 2: Explore the sales data with Explore Cards Before transforming data, check its quality and patterns. Explore Cards profile each column automatically. ### Profile the sales columns with Explore Cards When your View opens, **Explore Cards** appear above the data grid. They are automatic visualizations showing the distribution of values in each column. 1. Click on the **product_name** column's Explore Card - See the bar chart showing value distribution - Notice inconsistencies: "iPhone 13", "iphone 13", "IPHONE 13" all appear separately - This reveals a standardization opportunity 2. Click on the **order_date** column's Explore Card - See the date distribution histogram - Notice format variations that need cleaning 3. Open **Data Quality** in the footer below the data grid (when it is enabled for your workspace) - Shows the quality score, column completeness, critical issues, and recommendations - Click **View Details** for the full analysis ![View of sales_data_messy.csv with Explore Cards for product_name, order_date, unit_price, and region above the data grid](https://mammoth.io/docs/images/20260408_155758_VIewwithcards.webp) **What just happened**: Explore Cards automatically profiled every column, so you can spot quality issues without manual analysis. Double-click any value in an Explore Card to filter your data to just those rows. This creates a filter "pill" that you can remove at any time or convert into a permanent pipeline task. ### Data quality issues in the sales file The sample data contains common real-world issues: - **Product names**: Multiple variations ("iPhone 13", "iphone 13", "IPHONE 13") - **Duplicate records**: Same order appearing multiple times - **Date filtering needs**: Mix of old and recent orders Step 3 fixes these problems. ## Step 3: Clean the sales data with three tasks This step cleans and standardizes the data using visual transformations. Each transformation creates a Task in your Pipeline, which can be applied to future data. ### A. Standardize product names 1. Click the three-dot menu (⋮) on the **product_name** column header 2. Select **Bulk Replace** from the menu 3. Mammoth analyzes the column and suggests groupings of similar values: - "iPhone 13", "iphone 13", "IPHONE 13" → "iPhone 13" - Similar patterns for other products 4. Review the suggestions and click **Apply** 5. Notice the Pipeline panel on the left now shows "**Task 1: Bulk Replace**" ![Bulk Replace panel on product_name with Group Suggestions listing AirPods Pro, IPAD AIR, and an iPhone 13 group of 3 values](https://mammoth.io/docs/images/20260408_155818_Bulk_relplace_config.webp) ![Bulk Replace review step showing the iPhone 13 group with Previous and Apply buttons](https://mammoth.io/docs/images/20260408_155831_Bulk_replace_apply.webp) ![View with a Bulk Replace task on product_name in the Pipeline panel and standardized iPhone 13 values](https://mammoth.io/docs/images/20260408_155850_Pipeline_with_bulk_replace.webp) **What just happened**: You fixed inconsistent product names. The Bulk Replace function identified similar values and grouped them. This same logic now applies automatically to any new data you add to this Dataset. ### B. Remove duplicate rows 1. Click the **+** button (tooltip **Add a task**) 2. In the task picker, open **Filter Label & Replace** and select **Remove Duplicate Rows** 3. Under **Evaluate duplicates from**, choose which columns to compare (leave the default to compare all columns) 4. Click **Apply** 5. Notice the Pipeline shows "**Task 2: Remove Duplicate Rows**" and the row count decreased ![Task picker opened from the plus button in the Pipeline panel, with the search box, the category list and the Filter, Label & Replace category expanded to show Conditional Filter and Remove Duplicate Rows](https://mammoth.io/docs/images/20261009_092921_Task_picker_filter_label_replace.webp) Tasks execute from top to bottom in your Pipeline. You can drag tasks to reorder them, and Mammoth will re-execute the entire pipeline in the new sequence. ### C. Filter to recent orders 1. Click **+** → **Filter Label & Replace** → **Conditional Filter** 2. Configure the filter: - Select column: **order_date** - Choose condition: **is later than** - Set date: **2023-01-01** 3. Click **Apply** 4. The Pipeline now shows "**Task 3: Conditional Filter**" ![View with three tasks in the Pipeline panel: Bulk Replace, Remove Duplicate Rows, and Conditional Filter, leaving 349 rows](https://mammoth.io/docs/images/20260408_155908_three-task-in-pipeline.webp) **What just happened**: You built a three-task transformation pipeline without writing any code. Each task executes in sequence, and you can see the results immediately. The pipeline is saved, so when new data arrives, these same transformations apply automatically. ## Step 4: Review the three-task pipeline This step shows how to check each task in the pipeline. ### Inspect each task's transformation logic 1. Look at the **Pipeline panel** on the left sidebar 2. Click on any Task to see its configuration: - Shows exactly what parameters you set - Displays the logic applied to your data 3. Click **Preview** on each task to see before/after data: - View data state at any point in the pipeline - Understand how each transformation affects your results 4. Notice the complete audit trail: - Every change is listed as a Task - Team members can see and understand your logic ![Previewing data at Task 2, Remove Duplicate Rows, with the Exit Preview bar and the task's configuration panel open](https://mammoth.io/docs/images/20260408_160139_Preview_task_with_remove_duplicate_config.webp) **What just happened**: Your manual work is now a repeatable pipeline. When new sales data arrives, these same transformations execute automatically. You can go back to any pipeline task and see the data state at that point, which helps when you need to trace how a result was produced. ### What the three-task pipeline demonstrates This pipeline shows three properties of Mammoth pipelines: **Automation**: Future data batches can run through the same tasks **Auditability**: Every transformation is listed in the Pipeline **Reusability**: This pipeline can be copied and adapted for similar datasets ## Step 5: Export the cleaned data as CSV This step downloads the cleaned data. 1. Click the download icon in the top toolbar to open the **Save file as** menu 2. Choose your export format: - **CSV**: Most common, works everywhere - **XLSX**: An Excel workbook - **Mammoth Dataset**: Save your data to a new dataset 3. For this tutorial, select **CSV** 4. Click **Confirm** 5. Open the file—notice clean, standardized data: - Product names consistent - Duplicates removed - Only recent orders included ![Save file as menu from the download button, with CSV selected, XLSX, Mammoth Dataset, and a Confirm button](https://mammoth.io/docs/images/20260408_160219_Download-options.webp) **What just happened**: You transformed messy data into clean output. The pipeline you created is saved and reusable. ### Alternative next steps Instead of downloading, you could: - **Schedule automatic execution** so fresh data processes every night - **Create a dashboard** using the AI-powered dashboard creator ## Summary of the quick start workflow You have now run the complete Mammoth workflow: 1. **Upload**: Drag-and-drop or file selection gets data into Mammoth 2. **Explore**: Explore Cards profile each column without manual work 3. **Transform**: Point-and-click functions, with no code or formulas 4. **Reuse**: A pipeline applies to new data automatically 5. **Export**: Multiple formats and destinations are available The pipeline gives you reusable preparation, fewer manual errors, a visible audit trail of every task, and self-service without IT dependencies. ## Next steps Choose a learning path based on your role: ### For business analysts **Recommended path**: [Getting started as a data analyst](https://mammoth.io/docs/learn/getting-started/as-a-data-analyst/) Focus on: - Automating monthly reporting workflows - Building executive dashboards - Integrating with Excel and PowerBI - Scheduling pipelines for automatic execution ### For technical users **Recommended path**: [Getting started as a technical user](https://mammoth.io/docs/learn/getting-started/as-a-technical-user/) Focus on: - Advanced transformation functions - SQL Query capabilities - API integration and automation - Team enablement and template creation ### Deep dive on Mammoth concepts To understand how the platform is organized, read [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/). Learn about: - Workspace, Project, Dataset, Batch, View hierarchy - How Pipelines and Tasks work - Live Connections for database integration - Data versioning and audit trails ### Explore specific Mammoth features **Explore Cards**: [Explore Cards](https://mammoth.io/docs/learn/explore-discover/explore-cards-overview/)\ **Transformations**: [Transform data overview](https://mammoth.io/docs/learn/transform/)\ **Dashboards**: [Dashboards](https://mammoth.io/docs/learn/dashboard/)\ **Troubleshooting**: [Troubleshooting common issues](https://mammoth.io/docs/learn/troubleshooting/) ### Try the workflow with your own data 1. Upload a real file from your work 2. Explore it using Explore Cards 3. Build transformations for your actual business problems 4. Share results with your team **Tip**: Start with a small dataset (< 10,000 rows) to learn quickly, then apply those skills to larger production datasets. ## Need help? - **In-app documentation**: Click the 📘 book icon next to a transformation to open its related documentation and learn how that feature works. - **In-app Support**: Use the Support option in the sidebar to ask questions, report issues, or share feedback. **Remember**: You now have the foundation to automate your own data workflows. --- # First-time workspace setup URL: https://mammoth.io/docs/learn/getting-started/setup-workspace-guide/ · Updated: 2026-11-02 Set up a Mammoth workspace: configure general settings, invite users with roles, create projects, and generate API tokens before building pipelines. This guide is for Workspace Owners, IT administrators, and team leads setting up a new Mammoth workspace. It covers general settings, team invitations, project structure, and API access, in four steps. Start with [Before you begin](#before-you-begin), then follow Step 1 through Step 4. [Video: Watch on YouTube](https://www.youtube.com/watch?v=VdJ20gKHcSo) ## What is a workspace? A workspace in Mammoth is tied directly to your subscription and billing. It contains all your projects, datasets, users, and security settings. ![Workspace Settings General tab showing data usage, current plan limits, and a Projects table with a New Project button](https://mammoth.io/docs/images/20260408_153022_Wksp-setting-generaltab.webp) The person who creates the workspace becomes the Workspace Owner, with administrative control that includes billing management, user invitations, and API keys. Workspace Members are team members you invite, with permissions based on their roles. ## Profile: Your identity across workspaces A **Profile** is your personal Mammoth account tied to your email address. It represents your identity across the platform. Your Profile controls sign-in credentials and MFA, personal settings, and access to one or more Workspaces. One Profile can access multiple Workspaces, but it does not contain data itself. Data always lives inside a Workspace. **Analogy**: A Profile is like an employee badge. It gives you access to buildings, but it isn't the building. ![Profile Settings dialog with options for Reset Password, Two-Factor Authentication, Cookies, Privacy Policy, and Color mode](https://mammoth.io/docs/images/20260408_153036_ProfileSettings.webp) ![Workspace switcher menu listing four workspaces, with Rebecca's Workspace checked as the current one](https://mammoth.io/docs/images/20260408_153050_WSSwittcher.webp) ## Who should complete the workspace setup The Workspace Owner, an IT administrator, or the team lead responsible for data operations should complete this setup. The person needs authority to decide team structure, security policies, and project organization. ## Before you begin Gather the following information before starting your workspace configuration: - **Team members list**: Names, email addresses, and intended roles for each person - **Project structure plan**: Organize by department, client, or workflow based on your organization - **Data sources inventory**: Databases, APIs, and cloud storage you'll connect to - **Security requirements**: SSO, MFA, or IP restrictions for your organization - **Integration needs**: API usage or connections to external tools like Tableau or PowerBI ### Choose a project structure pattern Three common patterns suit different organizations: **Department-based structure**: Sales, Finance, Operations with each department as a separate project. Best for organizations where teams work independently on their own data. **Client-based structure**: Client_A, Client_B, Internal projects. Ideal for consulting firms or agencies managing data for multiple clients. **Process-based structure**: Raw_Data, Transformation, Reporting projects following your data pipeline flow. Works well for centralized data teams managing organizational workflows. ![Three workspace layouts: department-based (Sales, Finance, Operations), client-based (Client A, Client B, Internal), and process-based (Raw Data, Transform, Reporting)](https://mammoth.io/docs/images/20260408_153105_project_structure_patterns.webp) Start with two or three projects. You can add more later. ## Open Workspace Settings Click **Workspace Settings** at the bottom of the left sidebar. The settings page opens with a list of sections on the left. ![Workspace Settings with a left-hand list of General, User Management, Plan & Storage, API Keys, and Connected apps, showing the General section](https://mammoth.io/docs/images/20261009_101003_WorkspaceSettingsGeneral.webp) The settings are organized into these sections: - **General**: Workspace name, storage usage, current plan, projects, and upcoming features - **User management**: Inviting team members and managing roles - **API keys**: Programmatic access to Mammoth, external AI provider keys, and OAuth apps - **Plan & storage**: Subscription plan details and storage management - **Connected apps**: Third-party apps you allowed to access your Mammoth data ## Step 1: Configure general settings The **General** section provides an overview of the workspace. ### Rename the workspace Update the workspace name using the pencil icon. Use a clear and identifiable name to help users distinguish between multiple workspaces. ### Storage usage and plan - **Storage usage**: Displays current storage consumption for the workspace - **Current plan**: Shows the active subscription plan These sections are read-only and provide visibility into workspace status. ### Projects in General settings View all projects within the workspace along with their dataset count, last updated time, and assigned users. Create new projects using **New Project** or access additional actions from the overflow menu (⋯). ![General tab with arrows pointing to the New Project button and the overflow menu (three dots) on a project row](https://mammoth.io/docs/images/20260408_153140_WorkspaceSettingsGeneraltabshowing.webp) ## Step 2: Invite your team Invite team members and assign roles from the **User Management** section. Assigning the right role at the start prevents permission issues later. **Prerequisite**: You are a Workspace Owner. ![Invite users to workspace dialog with an email address box, an Invite button, an Assign to Projects checkbox, and an Existing workspace users list](https://mammoth.io/docs/images/20261009_101002_InviteUsersModal.webp) ### Invite users to the workspace 1. Click the **Invite Users** button in the User Management section 2. Enter email addresses for team members you want to invite 3. You can add multiple addresses separated by commas, semicolons, spaces, or on separate lines 4. Optionally check **Assign to Projects** and pick the projects invited users should join 5. Click **Invite** **Expected result**: Invited users receive an email invitation. ### Workspace and project roles **Workspace Member** is the default and safest starting role for most team members. They can work with data in projects where they're specifically granted access. **Project Admin** should be assigned to department heads or team leads who will manage specific projects and add people to their teams. **Project Editor** is appropriate for data analysts and business users who will work with data but won't manage project access or team membership. **Workspace Owner** is the person who created the workspace. Another user can be promoted to Owner later with **Make workspace owner** in the user's three-dot menu, and a workspace can have multiple Owners. ### Recommended starting role Start everyone as **Workspace Member** and give them Project Admin or Project Editor roles once you've created projects. This prevents access to data before project boundaries are established. Invited team members create their Mammoth accounts from the email invitation and gain access to your workspace. ## Step 3: Projects in a workspace When a workspace is created, Mammoth automatically creates a **default project** named **New project**. This lets you start working without creating a project first. You can rename, manage, or delete this project, or create additional projects as needed. ![Data Library with the project selector open, listing the default project New project and a New Project option, above an empty datasets view](https://mammoth.io/docs/images/20260408_153229_defaultproject.webp) ### Default project behavior - Every workspace includes a pre-created project called **New project** - You are assigned as **Project Admin** by default - The project can be renamed, managed, or deleted from the project menu ### Managing projects To manage a project, go to the **Data Library** and click the **project selector** (the dropdown arrow next to the current project name). Each project in the list shows an overflow menu icon (**...**) on hover. What you see in this menu depends on your role within that project: **Project Admins** see the full set of options: - **Project Settings**: rename the project, set how it handles dates, and control who can access it - **Manage Users**: add or remove workspace members and assign their project roles - **Leave Project** - **Delete Project** **Project Editors** see only: - **Leave Project** - **Delete Project**, greyed out Project Settings and Manage Users are not visible to Editors. If you cannot see these options, you have been added to the project as an Editor. Contact your Project Admin to request a role change. ### Configuring project settings Project Admins access Project Settings from the project overflow menu. The modal contains these configuration areas: **Project Name**: Rename the project at any time. Use clear, descriptive names that indicate purpose. Examples: `SALES_Pipeline`, `CLIENT_Acme`, `Q3-Analysis`. **Set how this project handles dates**: Check this box to choose how dates are read in CSV, Excel, and PDF files uploaded to the project (**Day first** or **Month first**), and the starting format for new date columns in the project. This is particularly useful when ingesting data from multiple sources with inconsistent date formatting. **Who can access**: Controls project visibility and membership. Three options are available: - **Everyone in this workspace**: All workspace members can see and access this project without a specific invitation. Use this for shared reference data or company-wide reporting projects. - **Some people in this workspace**: Only selected individuals can access this project. When you choose this option, a user list appears showing all workspace members. Check the box next to each person you want to add and assign their role (Admin or Editor) from the dropdown. Use this for department-specific or client-specific projects where data should be restricted. - **Only me**: The project is private and visible only to you. Use this for personal analysis, experimentation, or sensitive work in progress. Click **Save changes** to apply your settings. **Expected result**: The project uses the new name, date handling, and access setting. ### Recommended starter projects **A Sandbox** or "Testing" project** for experimentation without affecting production data. Team members can practice transformations and test pipelines here safely. **At least one production project** based on your organizational pattern: - Department-based: Create your first department project - Client-based: Create your first client project - Process-based: Create your raw data ingestion project **A "Shared Resources" project** for data that multiple teams need access to, such as company-wide reference data, organizational hierarchies, or common lookup tables. ### Project naming conventions - Use clear, descriptive names that indicate the project's purpose - Include department names or client identifiers - Consider using prefixes to group related projects visually - Examples: `SALES_Pipeline`, `SALES_Reports`, `CLIENT_Acme`, `CLIENT_Beta` Each project isolates its data. Live Connections and datasets in one project cannot be accessed from other projects. ## Step 4: Configure API access API keys enable integration with external tools such as Tableau, Power BI, custom applications, and automation workflows. Decide whether you need API access before generating keys. ### Check whether you need API access You need API access if you are: - Integrating with BI tools (Tableau, Power BI, Looker) - Building custom applications that consume Mammoth data - Automating data workflows with external systems - Using programmatic data access for advanced use cases Skip this step if your team will only use the Mammoth web interface at first. You can generate API tokens later. ![API Keys section with the API tokens card, a Generate key button, and a token row with a masked key](https://mammoth.io/docs/images/20261009_101001_APIKeysTokensCard.webp) ### Create an API token 1. Open the **API keys** section and click **Generate key** in the **API tokens** card 2. In the **Create API key** dialog, enter a descriptive name like "Tableau Integration" or "Production Automation" 3. Optionally turn on **Project scoped** and select a project to limit the key to that project 4. Click **Create key** 5. Click **Copy secret**, then **Done** 6. Store the secret securely in your password manager or secrets management system Mammoth displays the secret only once. If you lose it, generate a new key. ### Add external API keys for AI features To use AI-powered transformations such as Generative AI or advanced text processing, configure an external API key: 1. Go to the **API keys** section 2. Click **Add external key** 3. Select the AI provider and click **Next** 4. Choose the model 5. Enter a key name and your API key 6. Click **Add External Key** **Expected result**: The key appears in the External API Keys table. Treat API tokens like passwords. Don't commit them to code repositories, share them over unsecured channels, or store them in plain text files. Delete unused tokens. ## Post-setup checklist Confirm that you have completed these configuration steps: - [ ] Workspace name configured - [ ] Team members invited with roles matching their responsibilities - [ ] Initial projects created - [ ] API tokens generated if integration needs were identified during planning - [ ] External API keys added for AI features if using Generative AI or advanced text processing ## Next steps after configuration After configuring the workspace: 1. **Wait for team acceptance**: Team members need to accept invitations and sign in 2. **Upload first dataset**: Create a Live Connection or upload files 3. **Build first pipeline**: Apply transformations (see the [Quick start](https://mammoth.io/docs/learn/getting-started/quick-start/)) 4. **Set up an automation**: Automate recurring data processing workflows 5. **Create first dashboard**: Share insights with stakeholders ### Ongoing workspace maintenance **Monthly tasks**: - Review user activity to identify inactive accounts or access issues - Monitor storage usage (General section, under Storage usage) **Quarterly tasks**: - Audit the project structure against organizational needs **Security maintenance**: - Rotate API tokens periodically - Review user permissions and remove access for departed team members ## Common setup scenarios ### Small team (5 to 10 users) **Structure**: - Flat organization with 3 to 5 projects by department - All users as Workspace Members with manual project invitation This approach suits teams where access is coordinated informally. ### Enterprise department (50 or more users) **Structure**: - One workspace per major department - 10 to 15 projects organized by function or team - Mix of roles including Members and Project Admins - API integration with enterprise systems - MFA enforcement (a plan feature included on Pro) This structure adds governance for larger organizations. ### Consulting firm (multiple clients) **Structure**: - One workspace with client-based project isolation - One project per client plus one internal project - External users for clients with limited access - API tokens for client reporting automation - Strict project isolation preventing cross-client data visibility ## Troubleshooting workspace setup ### User didn't receive invitation email 1. Check their spam or junk folder first 2. Verify email address spelling in your invitation list 3. Resend the invitation with **Reinvite** in the Invite users dialog 4. Contact your IT department if corporate email filtering blocks external invitations ### Can't find workspace settings 1. Check the bottom of the left sidebar for **Workspace Settings** 2. Confirm you're the Workspace Owner (most settings are Owner-only) 3. Ask an existing Workspace Owner to make you an Owner if needed ### Storage limit reached 1. Check current usage in Workspace Settings → General → Storage usage 2. Delete unnecessary datasets or batches no longer needed 3. Upgrade your subscription plan for additional storage capacity ### Team member can't access project 1. Verify they've been invited to the workspace and activated their account 2. Check project-specific permissions ensuring they've been granted access 3. Ensure they completed account activation by clicking the invitation email link ### API token not working 1. Verify the token was copied correctly without extra spaces or line breaks 2. Check that the key hasn't been removed in the API keys section ## Related pages For ongoing workspace administration, see [Workspace management](https://mammoth.io/docs/learn/workspace-management/) and [Projects](https://mammoth.io/docs/learn/projects/). --- # What is Mammoth analytics? URL: https://mammoth.io/docs/learn/getting-started/what-is-mammoth/ · Updated: 2026-11-02 Mammoth Analytics is a no-code data preparation and AI dashboard platform. Learn what it does, who it is for, and what it does not do. Mammoth Analytics is a no-code data preparation and AI-powered dashboard creation platform that enables business users to automate data workflows. It makes data operations accessible to business analysts, operations managers, and domain experts without requiring IT support or extensive technical training. [Video: Watch on YouTube](https://www.youtube.com/watch?v=fCVYh8GdPlk) ## The data preparation problem Mammoth addresses Business teams often spend more time preparing data than analyzing it, for these reasons: - Spreadsheets have row limits and don't automate recurring work - Traditional data preparation tools require technical training - BI tools require clean data input - IT teams become bottlenecks for simple data requests The result is manual processes, back-and-forth between business teams and IT, and a steep learning curve. ![Table comparing a manual Excel process with an automated Mammoth pipeline across data sources, cleaning, automation, and governance](https://mammoth.io/docs/images/20260408_152802_AftercomparisonExcel.webp) ## How Mammoth works Mammoth is built on three principles: ### Accessibility over complexity Mammoth has an Excel-familiar interface with drag-and-drop operations. Visual pipeline development requires no coding. ![Animation of reordering tasks in the Pipeline panel beside the Sales_2026 data table](https://mammoth.io/docs/images/20260302_171356_reorder-tasks_1-test.webp) ### End-to-end data journey Mammoth covers the whole data workflow: **Connect**: Access connectors including files, databases, APIs, and cloud applications through Live Connections **Explore**: Interact with automatically generated Explore Cards for column-level filtering and quick data exploration **Assess**: Use **View Data Quality** and **View Insights** to profile datasets, detect issues, and understand patterns **Transform**: Visual transformation functions plus AI-powered capabilities let you clean, combine, and reshape data without coding **Analyze**: Built-in metrics and calculations **Share**: AI-powered dashboards, flexible exports, and Live Links deliver insights to stakeholders To build your first automated pipeline, follow the [Quick start](https://mammoth.io/docs/learn/getting-started/quick-start/). ### Cloud-based infrastructure and certifications Mammoth runs on cloud-based infrastructure, so there are no local hardware limits. The platform is SOC 2 Type II and ISO 27001 certified. ![Regional Sales Performance Dashboard with filters, key insights, and ring charts of revenue by location and category](https://mammoth.io/docs/images/20260408_152819_DashboardShowing.webp) ## Who Mammoth is for ### Business analysts Excel power users hitting scalability limits who need to automate recurring monthly or weekly reports. Mammoth turns manual work into automated pipelines, for example when consolidating multi-source reports. ### Technical enablers IT and analytics teams supporting business users who are overwhelmed by simple data requests. Data engineers use Mammoth to enable self-service analytics across the organization. ### Operations managers Leaders who need visibility into data processes and want their teams to be self-sufficient. Mammoth provides audit trails and governance while enabling team independence. Operations leaders use it to standardize workflows across multiple teams. ### Industries Mammoth is used in **Financial Services**: Regulatory reporting and compliance automation with complete audit trails **Manufacturing**: Production data consolidation, quality analysis, and supply chain visibility **Hospitality**: Multi-location operations reporting and guest experience analytics **CPG**: Retail analytics and distributor data harmonization across channels ## Who Mammoth is not for Mammoth has these limits: **Not a traditional data warehouse**: Mammoth provides cloud-based data storage optimized for active transformation work, not long-term historical archiving. Many customers export transformed data to warehouses like Snowflake or Redshift for long-term analytical storage. **Not for advanced data science modeling**: Our focus is data preparation and business analytics, not building ML/AI models in Python or R. **Not for real-time streaming**: Mammoth optimizes for batch processing and transformation workflows, not sub-second event streaming. **Not a code-based ETL tool**: If your team prefers writing Python or SQL scripts over visual interfaces, traditional ETL tools may be a better fit. Mammoth sits between data sources and analysis as the transformation layer: business users prepare data themselves, then send it wherever needed. ## Platform capabilities **Visual pipeline development**: Drag-and-drop transformation functions accessible to anyone **AI-powered transformations**: Describe what you want and get a working pipeline **Explore Cards**: Automatically generated, interactive column-level visualizations for quick filtering and exploration **Live Connections**: Connections to databases, applications, and APIs **AI dashboards**: Build dashboards by describing what you want **Automations**: Schedule, automate, and monitor data workflows **Export flexibility**: Send data to databases, warehouses, BI tools, files, or APIs ![Seven cards: Visual Pipeline, AI Transformations, Explore Cards, Live Connections, AI Dashboards, Orchestration, Export](https://mammoth.io/docs/images/20260408_152856_Platformcapabilities.webp) ## Security - SOC 2 Type II certified - ISO 27001 compliant - SSO (SAML/OIDC) and enforced MFA, available as plan features ![Grid of customer logos under the heading Trusted by, including NielsenIQ, Starbucks, and Bacardi](https://mammoth.io/docs/images/20260408_152914_Platformcapabilities-1.webp) ## Getting started To begin: 1. **Try the quick start**: Build your first pipeline 2. **Explore by persona**: Choose your role-based learning path for targeted guidance 3. **Sign up for a trial**: Try Mammoth with your own data Start with one manual process you repeat monthly and automate that first. --- # Glossary URL: https://mammoth.io/docs/learn/glossary/ · Updated: 2026-11-02 Definitions of Mammoth terms such as Workspace, Project, Dataset, Batch, View, Pipeline, Automation, Data Check, and Checkpoint, each linked to its main docs page. This glossary defines the terms Mammoth uses, in alphabetical order. Each entry links to the page that covers the topic in full. ## Activity Log The Activity Log is Mammoth's audit trail. It records the actions people take in your workspace, from creating datasets and editing pipelines to changing Automations and managing users. Workspace Owners and Workspace Members can open it from the **Monitor** page. See [Activity Log](https://mammoth.io/docs/learn/monitor/activity-log/). ## Auto-sync Auto-sync is a toggle that controls whether a View or an export updates automatically when its upstream data changes. Mammoth has two independent layers: **View Auto-sync** re-runs a View's pipeline when a new batch arrives, and **Export Auto-sync** sends a View's new output to its destination after each run. When Auto-sync is on, which is the default, updates flow through. When it is off, data is held until you release it manually from the Monitor panel. See [Automations](https://mammoth.io/docs/learn/automations/#auto-sync), [Datasets and Views](https://mammoth.io/docs/learn/data-library/dataset-panel/#view-auto-sync), [Send to destinations](https://mammoth.io/docs/learn/export-share/send-to-destinations/), and [Live links](https://mammoth.io/docs/learn/export-share/live-links/). ## Automation An Automation runs recurring work in a project without manual steps. Mammoth has four Automation types: Dataset Refresh, Data Consolidation, File Collection, and Messaging. You create and manage them from the **Automations** tab in the Data Library. See [Automation types](https://mammoth.io/docs/learn/automations/automation-types/) and [Managing automations](https://mammoth.io/docs/learn/automations/managing-automations/). ## Batch A Batch is one version of data inside a Dataset. Each time data is added to a Dataset, it creates a Batch with its own identifier, timestamp, and row count. Batches can be combined, replaced, removed, or suspended. See [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/) and [Batch management](https://mammoth.io/docs/learn/data-sources/batch-management/). ## Checkpoint A Checkpoint is a pipeline control that pauses the pipeline at a specific step to notify your team or wait for explicit approval before continuing. Use it when a person needs to review the data before the pipeline proceeds. See [Pipeline controls](https://mammoth.io/docs/learn/transform/controls/). ## Connector A Connector links Mammoth to an outside source such as a database, a cloud data warehouse, a SaaS platform, cloud storage, or a REST API. Each connector handles authentication and data selection in a consistent flow. See [Connectors](https://mammoth.io/docs/learn/connectors/). ## Dashboard A Dashboard is an interactive set of charts and insights that you build by describing what you want to an AI assistant. It reads a View as its data source and can be published to a shareable link. See [Creating dashboards](https://mammoth.io/docs/learn/dashboard/creating-dashboards/) and [Publishing and sharing dashboards](https://mammoth.io/docs/learn/dashboard/share-dashboard/). ## Dashboard Editor and Dashboard Viewer Dashboard Editor and Dashboard Viewer are the two roles on a single dashboard. A Dashboard Editor can modify the dashboard, and a Dashboard Viewer can only view it. See the [roles and permissions matrix](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix). ## Data Check A Data Check is an automated quality gate attached to a pipeline step. After the step runs, the Data Check evaluates the output against rules you define, such as row count, null percentage, unique values, or value range, and either pauses the pipeline or flags the problem and continues. See [Pipeline controls](https://mammoth.io/docs/learn/transform/controls/). ## Data Consolidation Data Consolidation is an Automation type that processes files uploaded to a source folder and merges them into a destination Dataset. It runs every time a new file lands in the folder, with no schedule, and works in a combine mode or a replace mode. See [Data Consolidation](https://mammoth.io/docs/learn/automations/data-consolidation/). ## Data Library The Data Library is where a project's Datasets live, alongside the reusable pipeline components called Parameters and Snippets. It also holds the **Automations** tab. See [Data Library](https://mammoth.io/docs/learn/data-library/). ## Data Quality Report The Data Quality Report is an AI-powered assessment that evaluates your data health using the DAMA framework. It gives an overall quality score with recommendations organized into sections. See [Data quality report](https://mammoth.io/docs/learn/explore-discover/data-quality-report/). ## Dataset A Dataset is the result of importing data into Mammoth. It holds your working data in a standardized form, with a schema, metadata, and a collection of Batches. See [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/) and [The Dataset panel](https://mammoth.io/docs/learn/data-library/dataset-panel/). ## Dataset Refresh Dataset Refresh is an Automation type that re-fetches data from a cloud source on a schedule, so a connected Dataset stays current. It only works on Datasets connected to an API or database, not on uploaded files. See [Dataset Refresh](https://mammoth.io/docs/learn/automations/dataset-refresh/). ## Draft Mode Draft Mode is a pipeline setting that queues your task changes as Pending Updates instead of running them immediately. The queued changes run together when you click **Apply now**. See [Understanding the pipeline](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/). ## Explore Cards Explore Cards are interactive cards that show what is inside a column: the distinct values of a text column, the distribution of a numeric column, or the timeline of a date column. Clicking values on a card filters the grid. See [Explore Cards](https://mammoth.io/docs/learn/explore-discover/explore-cards-overview/). ## File Collection File Collection is an Automation type that collects files from folders in external cloud platforms into a destination folder in Mammoth. It is available on plans that include it. See [Automation types](https://mammoth.io/docs/learn/automations/automation-types/). ## Folder A Folder organizes Datasets in the Data Library. You can move Datasets and Folders into other Folders, and a Data Consolidation Automation can watch a Folder for new files. See [Cloning and moving datasets](https://mammoth.io/docs/learn/data-library/clone-move-data/). ## Insights Insights, also called View Insights, are short business observations that Mammoth's AI generates from the statistical profile of a View. You click a button and the AI surfaces the most significant observations in plain language. See [View insights](https://mammoth.io/docs/learn/explore-discover/view-insights/). ## Live Connection A Live Connection is a connection from a project to a source such as a database, API, or business application. Mammoth pulls the data into a Dataset, and credentials are stored per project. Only a Project Admin can create, update, or delete Live Connections. See [Connectors](https://mammoth.io/docs/learn/connectors/). ## Messaging Messaging is an Automation type that sends scheduled email notifications with Dataset Views attached as CSV files. It runs on a recurring schedule and has no manual-only option. See [Messaging](https://mammoth.io/docs/learn/automations/messaging/). ## Metrics Metrics are single-value calculations such as total revenue, average deal size, or defect rate, built from a column in the Metrics panel. They update as you filter your data in Explore Cards. See [Metrics panel](https://mammoth.io/docs/learn/explore-discover/metrics-panel/). ## Parameter A Parameter is a named value, either a number, a text string, or a date, that you reference in pipeline conditions and filters. Change the value once and every pipeline that uses it updates. See [Parameters and snippets](https://mammoth.io/docs/learn/data-library/parameters-snippets/). ## Pipeline A Pipeline is the ordered list of Tasks that transform the data in a View. It runs top to bottom, can be reused on new data, and every step can be reviewed, edited, reordered, or removed. See [Understanding the pipeline](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/). ## Project A Project is an organizational container inside a Workspace. It groups related Datasets and Automations together and controls which people can access them. See [Projects](https://mammoth.io/docs/learn/projects/) and [Creating a project](https://mammoth.io/docs/learn/projects/create-project/). ## Project Admin and Project Editor Project Admin and Project Editor are the two project roles shown in the product. A Project Admin controls the project's settings and members as well as everything an Editor can do. A Project Editor works with the project's data and pipelines. See the [roles and permissions matrix](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix) and [Project roles and permissions](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/). ## Snippet A Snippet is a reusable block of SQL or expression code that you embed in tasks using double-brace syntax. Where a Parameter holds a single value, a Snippet holds logic. See [Parameters and snippets](https://mammoth.io/docs/learn/data-library/parameters-snippets/). ## Task A Task is one transformation step in a Pipeline, such as a filter, a join, or a calculation. Each Task does one operation, can be configured in the function panel, and can be previewed. See [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/). ## Trash Trash is where deleted Datasets, Views, Automations, Dashboards, and Folders wait before being permanently removed. Items stay recoverable for 30 days, and each project has its own Trash. See [Trash and recovery](https://mammoth.io/docs/learn/trash-recovery/). ## View A View is where you interact with your data. It shows the data in an interactive grid, with Explore Cards, a Metrics panel, and a Pipeline for building transformations. One Dataset can have many Views, and Views do not change the source data. See [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/) and [View management](https://mammoth.io/docs/learn/data-sources/view-management/). ## Workspace A Workspace is your organization's whole Mammoth environment. It is where billing and the subscription are managed, users are invited and given roles, and all Projects live. See [Core concepts](https://mammoth.io/docs/learn/getting-started/core-concepts/) and [Workspace management](https://mammoth.io/docs/learn/workspace-management/). ## Workspace Owner and Workspace Member Workspace Owner and Workspace Member are the two workspace roles. A Workspace Owner has full administrative control, including users, billing, and API keys. A Workspace Member can create projects and view the Activity Log, and reaches a project only after being added to it. See the [roles and permissions matrix](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix). --- # Learn URL: https://mammoth.io/docs/learn/ · Updated: 2026-11-02 Index of the Mammoth Learn section, with guides for getting started, data, pipelines, dashboards, automations, administration, security, and performance. The Learn section covers how to use Mammoth Analytics, from your first data upload to automated pipelines, dashboards, and workspace administration. It is for analysts, managers, and administrators. New users should start with [Getting started with Mammoth](https://mammoth.io/docs/learn/getting-started/). ## Sections in Learn | Section | What it covers | | --- | --- | | [Getting started with Mammoth](https://mammoth.io/docs/learn/getting-started/) | Role-based learning paths for data analysts, managers, and technical users, plus the quick start and your first pipeline. | | [Data sources](https://mammoth.io/docs/learn/data-sources/) | Ways to get data into Mammoth: file upload, Live Connections, API import, URL import, batch management, and AI-generated datasets. | | [Connectors](https://mammoth.io/docs/learn/connectors/) | Connectors for databases, cloud data warehouses, SaaS platforms, cloud storage, and REST APIs. | | [Data Library](https://mammoth.io/docs/learn/data-library/) | Reusable pipeline components: Parameters (named values shared across pipelines) and Snippets (reusable transformation code). | | [Transform and pipelines](https://mammoth.io/docs/learn/transform/) | Visual transformation pipelines with 30+ operations, using point-and-click tools or natural language AI prompts. | | [Explore and discover](https://mammoth.io/docs/learn/explore-discover/) | Data profiling with Explore Cards, which show a distribution chart for each column. | | [Automations](https://mammoth.io/docs/learn/automations/) | Scheduled refreshes of cloud-connected datasets, automatic file consolidation, file collection from cloud storage, scheduled email reports, Auto-sync, and pipeline governance. | | [Dashboards](https://mammoth.io/docs/learn/dashboard/) | AI-assisted dashboards: describe what you want to see and Mammoth generates a styled, shareable dashboard. | | [Export and share](https://mammoth.io/docs/learn/export-share/) | Downloading a snapshot, exporting to a persistent destination such as BigQuery, Snowflake, or SFTP, and publishing a live dashboard link. | | [Projects](https://mammoth.io/docs/learn/projects/) | Creating, sharing, and configuring Projects, and the Project roles and permissions. | | [Workspace management](https://mammoth.io/docs/learn/workspace-management/) | Creating a Workspace and configuring its settings, members, and roles. | | [Monitor](https://mammoth.io/docs/learn/monitor/) | A live view of running, waiting, and paused pipelines and Automations, plus the Activity Log. | | [Security and compliance](https://mammoth.io/docs/learn/security-overview/) | Sign-in and authentication, access control, credential encryption, data location, audit logs, and compliance. | | [Trash and recovery](https://mammoth.io/docs/learn/trash-recovery/) | Restoring deleted items from the Trash. | | [Troubleshooting](https://mammoth.io/docs/learn/troubleshooting/) | Diagnosing common problems with data quality, connections, transformations, and performance. | | [Performance](https://mammoth.io/docs/learn/performance/) | Working efficiently with large datasets: pipeline optimization and connector performance. | | [FAQ and common tasks](https://mammoth.io/docs/learn/faq/) | Short answers to common "how do I" questions, each linked to the full guide. | | [Glossary](https://mammoth.io/docs/learn/glossary/) | Definitions of Mammoth terms such as Workspace, Project, Dataset, Batch, View, Pipeline, and Automation. | | [Limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/) | File sizes, row limits, AI limits, schedule intervals, API rate limits, and per-plan allowances in one place. | --- # Limits and quotas URL: https://mammoth.io/docs/learn/limits-and-quotas/ · Updated: 2026-11-02 Reference for Mammoth limits and quotas, including file upload size, row limits, AI limits, schedule intervals, name lengths, API rate limits, and per-plan allowances. This page lists the limits that apply when you work in Mammoth. Other pages mention a limit where it matters and link here. Some limits are fixed for every workspace. Others are set by your plan. ## Data import | Limit | Value | Applies to | | --- | --- | --- | | Size per upload request | 50 MB | Every plan. A folder upload counts as one request. See [Uploading files](https://mammoth.io/docs/learn/data-sources/file-upload/). | | Files per upload | 1,000 | Uploading files in one go. Files go up in groups of 50, with a 30-second pause between groups. | | Rows when generating a dataset with AI | 1 to 500 | The **User defined** row count in **Generate with AI**. See [Generate with AI](https://mammoth.io/docs/learn/data-sources/generate-with-ai/). | | PDF pages | 2,000 | PDF extraction. See [PDF extraction](https://mammoth.io/docs/learn/connectors/pdf-extraction/). | The 50 MB limit is the same on every plan. If an upload is larger, split it or reduce it before uploading, or [import it from a URL or connector](https://mammoth.io/docs/learn/data-sources/). Pasting data from the clipboard has no documented row limit. If the browser cannot hand over the pasted content, Mammoth shows "Content too large to paste. Use the file upload option instead." Upload the file instead. ## Transform and AI | Limit | Value | Applies to | | --- | --- | --- | | Rows processed by Generative AI | 50,000 | The first 50,000 rows of the view. | | Characters per Generative AI answer cell | 300 | A longer answer fails with an excessive data generated error. | | Context columns for Generative AI | 20 | Selecting more than 20 columns shows "Maximum 20 columns can be selected." | | Rows in a Generative AI preview | 10 | The **Preview** button. | | Join result size | 100,000 rows and 5 times the larger input | Mammoth blocks a join whose predicted result is over 100,000 rows and more than 5 times the row count of the larger of the two views. See [Unify](https://mammoth.io/docs/learn/transform/unify/). | Generative AI runs use the external API key your workspace owns, so they do not count against a plan allowance. See [Generative AI](https://mammoth.io/docs/learn/transform/generative-ai/). ## Export and email | Limit | Value | Applies to | | --- | --- | --- | | Rows in an XLSX download | 50,000 | Views over this size show "XLSX download is not available for views over 50,000 rows." Download CSV instead. See [Download options](https://mammoth.io/docs/learn/export-share/download-options/). | | Rows attached to a Messaging email | 100,000 | The combined row count of all attached views. See [Messaging](https://mammoth.io/docs/learn/automations/messaging/). | ## Schedules The shortest interval you can set depends on your plan's refresh frequency. | Unit | Choices in the scheduler | | --- | --- | | Minutes | 5, 10, and so on up to 55 in steps of 5 | | Hours | 1 to 23. When your plan's refresh floor is hourly, the minimum is 3. | | Days | 1 to 6 | | Weeks | 1 to 3 | | Months | The 1st to the 31st | | Years | 1 to 5 | - Messaging schedules do not offer the minute option. - Data Consolidation has no schedule. It runs when a file lands in the source folder. - Your plan sets the shortest interval you can schedule (see the refresh frequency row in [Plan allowances](#plan-allowances)): Free cannot schedule runs, Starter schedules weekly or less often, Team daily or less often, and Pro every 3 hours or less often. No self-serve plan offers an interval of 1 hour. See [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/). ## Names and text | Item | Maximum length | | --- | --- | | Project name | 63 characters | | Workspace name | 63 characters | | Dataset, view, and column names | 300 characters | | Folder name | 100 characters | | Parameter and Snippet names | 100 characters | | Automation name | 200 characters | | Automation description | 2,000 characters | ## Dashboards | Limit | Value | | --- | --- | | Context files added to a dashboard | 20 files, 10 MB each | | Datasets behind one dashboard | 1. Every figure on a dashboard reads from the same dataset. | | Smallest time step | A day. Time-based figures group by day, week, month, quarter or year. | | Rows in a table figure | 100 | Dashboard context files accept PDF, Word, text, Markdown, and CSV. ## Trash and activity history | Limit | Value | | --- | --- | | Time an item stays in Trash | 30 days by default, then Mammoth permanently deletes it. See [Trash and recovery](https://mammoth.io/docs/learn/trash-recovery/). | ## API rate limits Mammoth limits API requests per minute for each user session, or per IP address for unauthenticated requests. | Method | Requests per minute | | --- | --- | | GET | 600 | | POST | 300 | | PATCH | 60 | | DELETE | 60 | | Other methods | 600 | Going over a limit returns a 429 response with "Rate limit exceeded" and a `retry_after` of 60 seconds. See [API errors](https://mammoth.io/docs/build/errors/) for handling details. ## Plan allowances These values come from the current self-serve plans. Enterprise plans and older plans are set by contract, so ask your account team for their values. | Allowance | Free | Starter | Team | Pro | | --- | --- | --- | --- | --- | | Users | 1 | 2 | 5 | 15 | | Included storage | 10 GB | 10 GB | 10 GB | 10 GB | | Projects | 3 | Unlimited | Unlimited | Unlimited | | Pipeline versions | 10 | Unlimited | Unlimited | Unlimited | | Published dashboards | 3 | 25 | 100 | Unlimited | | AI dashboard generations per month | 5 | 25 | 100 | 300 | | Viewer Q&A questions per month | Not included | Not included | 1,500 | 5,000 | | Refresh frequency | Manual only | Weekly or longer | Daily or longer | Every 3 hours or longer | | Messaging schedules | Not included | 3 | Unlimited | Unlimited | | Activity Log history | 7 days | 90 days | 1 year | 3 years | Starter, Team, and Pro can add storage in packs that bring the total to 50 GB, 250 GB, or 1,000 GB. --- # Activity Log URL: https://mammoth.io/docs/learn/monitor/activity-log/ · Updated: 2026-11-02 Reference for the Mammoth Activity Log: what it records, project and workspace scope, filters, investigation steps, and export to CSV, XLSX, or a dataset. The Activity Log is Mammoth's audit trail. It records the actions people take in your workspace, from creating datasets and editing pipelines to changing Automations and managing users. This page is for people with the **View Activity Log** workspace permission, and administrators, who review, investigate, or export that record. Unlike the rest of [Monitor](https://mammoth.io/docs/learn/monitor/) (which focuses on current pipeline status and Automation status), the Activity Log is a chronological stream of the actions taken in your workspace. Each entry shows when it happened and who did it. ![Activity Log with Date, Events, Details, Object, Category, and Author columns, Project and Workspace buttons, and an Export button](https://mammoth.io/docs/images/20260805_050243_M-AL1.webp) ## What the Activity Log captures | Category | Events logged | | --- | --- | | **Dataset** | Create, rename, duplicate, delete, add data, combine, replace, delete batches, suspend and resume batches | | **View** | Create, rename, delete, rerun | | **Pipeline** | Add, edit, rename, delete, suspend, and restore tasks and actions | | **Automation** | Create, edit, rename, delete, update | | **Connector** | Create, edit, and delete connections | | **Project** | Create, rename, delete, property updates | | **Folder** | Create, rename, delete | | **Workspace** | Rename workspace, invite users, remove users, delete invites | | **Data Retention** | Create, edit, delete, and run retention policies; retention approval requests | ## Open the Activity Log The Activity Log is available as the **Activity Log** tab within the **Monitor** page. Click **Monitor** in the left sidebar, then select the **Activity Log** tab. You need the **View Activity Log** workspace permission to see this tab. ## Project and Workspace scope The Activity Log has two scope modes, toggled with the **Project** and **Workspace** buttons at the top right of the tab, next to **Export**. | Mode | What it shows | | --- | --- | | **Project** | Events that belong to the current project—datasets, views, pipelines, Automations, and any other actions taken within this project | | **Workspace** | All project events plus workspace-level events such as connector create, edit, and delete events, user management, and actions across other projects | The active scope button appears highlighted. Switch between modes at any time; the log reloads immediately. > **Tip:** Use **Project** scope when investigating a specific dataset or pipeline. Use **Workspace** scope when auditing connector changes or tracking activity across all projects. ## Reading the Activity Log The log is displayed as a scrollable table with these columns: | Column | Description | | --- | --- | | **Date** | Timestamp of the action (relative, for example "22 minutes ago") | | **Events** | The action type, such as *Create dataset*, *Edit automation*, or *Add tasks to pipeline* | | **Details** | Human-readable description including resource names and outcomes | | **Object** | Project path and resource name affected (linked for direct navigation) | | **Category** | Resource type: Dataset, Pipeline, View, Automation, Connector, Project, Folder, Workspace | | **Author** | The workspace member who performed the action | The **Object** column links are clickable. Click a dataset, view, or Automation name to navigate directly to that resource. This is useful when investigating what changed after an alert or failed run. ## Filtering the log Use the filter controls in the column headers to narrow the log to exactly what you need. | Filter | How to use | | --- | --- | | **Events** | Filter by action type (for example, show only *Create dataset* or *Edit automation* events) | | **Category** | Filter by resource type: Dataset, Pipeline, View, Automation, Connector, Project, Folder, Workspace | | **Author** | Filter to a specific team member's actions | | **Date range** | Change the time window—defaults to **This month** (the trailing month) | Click any filter control in the column header to open its dropdown and select one or more values. The **Search by object name** box above the table narrows the log to events whose object name matches. **Date range options:** Today, Yesterday, Last 7 days, This week, Last week, This month, Last 3 months, Last 6 months, This quarter, Last quarter, Year to date (YTD), or Custom. ### View activity for one object Each row has a **View activity for this object** button. It limits the log to that object's history and shows an **Object** pill above the table. Remove the pill to see the full log again. Export isn't available while an object is selected. ### Example: find who changed an Automation **Scenario:** Find who changed an Automation last month. 1. Click the **Category** filter → select **Automation** 2. Use the **Events** filter → select **Edit automation** 3. Set the date range to **Last 3 months** 4. Read the **Author** and **Details** columns for the Automation **Expected result**: The table lists each edit with its author and timestamp. ## Exporting the Activity Log **Prerequisite**: You can see the Activity Log tab, and your plan includes Activity Log history (the `activityLogDays` plan feature). If it doesn't, **Export** prompts you to upgrade or contact support. Click **Export** at the top right, choose a format, and click **Confirm**. ![Export file as dialog with CSV selected, XLSX and Mammoth Dataset options, and a Confirm button](https://mammoth.io/docs/images/20260422_175504_activity-log-export-dialog.webp) | Option | Output | | --- | --- | | **CSV** | Downloads the log as a `.csv` file | | **XLSX** | Downloads the log as an Excel `.xlsx` file | | **Mammoth Dataset** | Creates a new dataset in the project you choose from the current log records. Enter a file name and select the project. | > **Note:** The export applies your active filters, search text, and scope. Remove filters before exporting if you need the complete log for the selected date range. ## Compliance reviews Every record includes the user who performed the action and a timestamp. Filter to the audit period and the relevant categories, then export to CSV or XLSX for your audit team. The **Mammoth Dataset** export option lets you keep a historical record you can query with pipelines. How far back the log reaches depends on your plan. Activity older than your plan allows isn't available, and a banner above the table says so. Without a plan allowance, the tab shows only the latest 50 items. See [Audit logs](https://mammoth.io/docs/learn/security-overview/audit-logs/) for the retention table. ## Troubleshooting **I don't see recent activity:** - Check the date range filter. It defaults to "This month" (the trailing month). Widen the range if the activity is older, and check your plan's history limit. - Confirm you're viewing the correct workspace if you belong to multiple. **An action I expected is not logged:** - The Activity Log records the actions listed in the table above. Other events, such as individual pipeline run results, are not part of it. **The export is missing records:** - Check whether any filters are active. The export uses your current filter state. Reset all filters before exporting to get the full log. --- # Monitor URL: https://mammoth.io/docs/learn/monitor/ · Updated: 2026-11-02 Use Monitor to see what needs attention, what is running, and what has auto-sync paused in a Mammoth project, plus the Activity Log of workspace events. Monitor shows everything happening in a Mammoth project: items waiting for your action, pipelines and Automations currently running, items with Auto-sync paused, and an Activity Log of workspace events. This page is for analysts, operations managers, and administrators. Start with [Needs attention](#needs-attention) if you saw the orange badge. ![Monitor for the Sales Data project, Needs Attention tab, with an Errors section and Pending items each showing a Fix settings button](https://mammoth.io/docs/images/20260805_045831_M-needsattention1.webp) ## Open Monitor Click **Monitor** in the left sidebar navigation. The orange badge shows the count of items in the **Needs Attention** tab. The badge automatically: - Displays when one or more items need attention - Disappears when all items are resolved (or you have no access to see any Needs Attention items) The badge updates with each poll cycle, so you always see the current count. ![Left sidebar with Data and Publish items and a Monitor item at the bottom showing an orange badge with the number 20](https://mammoth.io/docs/images/20260805_045846_M-orangebadge1.webp) ## Switch projects The project selector dropdown next to the Monitor title lets you view any project you have access to. Switching projects here does **not** change which project you are working in. It is a read-only view into that project's live state. ![Monitor project selector dropdown open, listing projects including P2, Test App, Sales Data, and Marketing, with Sales Data checked](https://mammoth.io/docs/images/20260805_045907_M-swithcingproject1.webp) ## Monitor tabs | Tab | Badge color | What it shows | | --- | --- | --- | | **Needs Attention** | Orange | Items requiring your action: errors, pending data, pipeline drafts, governance | | **Running** | Green | Pipelines, tasks, and Automations currently executing or queued, plus Active Retentions. The count includes Active Retentions | | **Paused** | Gray | Pipeline tasks, exports, and connections with Auto-sync disabled | | **Activity Log** | None | Chronological event history for the project or workspace | All tabs refresh automatically every 5 seconds. A tab's badge count updates with each poll. The badge color is a secondary cue; each tab also shows its name and count. ## Needs attention **What it shows:** Everything in the project that requires your action before work can continue. The tab is divided into up to four sections: Errors, Pending, Pending Retentions, and Governance. Each section only appears when it has items. **Empty state:** Checkmark icon · "All clear" · "Nothing needs attention right now." ![Needs Attention tab with Pending items, a Pipeline changes pending row, and a Governance section with a Checkpoint: approval required row](https://mammoth.io/docs/images/20260805_045931_Needsattentionwiththreesection1.webp) ### Errors Pipeline runs that have failed. Each row shows: - "Error running pipeline" - Dataset name · view name · task count **Action:** **Go to View** opens the view in the Data Editor to inspect the error. A **Show in workflow** icon button opens the item in Workflows. If the view was deleted, Monitor shows "View is missing or was deleted." ### Pending Items that have arrived or changed and are waiting for you to process them. **Batch pending**: New data has arrived at a destination and is waiting to be applied. Each row shows: - "Batch pending" - Source view name · "New batch received {time ago}" · row count - Destination or operation context (for example, `Join: DestinationName` or `Source: dataset name`) Actions: - **View Batch**: preview the incoming data before committing (appears when the destination is a dataset) - **Update**: apply the batch immediately (shows a loading spinner while running; row disappears once complete) - **Copy link to clipboard**: icon button that appears only for Live Link destinations; copies the live link URL to clipboard so you can share it with external users What causes a Batch pending item to appear: - A Join or Lookup source view receives new batch data - A connector export or Publish-as-Database destination receives new data - A cross-project dependency's upstream source is updated - A Live Link's external source changes When the source link has Auto-sync off, the incoming batch is held. The row reads "new batch received, auto-sync off" and shows **Preview** and **Process** instead of **View Batch** and **Update**. Items clear automatically when the destination is updated or when auto-sync is re-enabled. Other pending items that need your input appear in the same section: **Ambiguous date format**, **Password required** (a password-protected file), **Schema mismatch**, **Sheet selection required**, and **Unstructured rows**. Each row has a button such as **Select sheets**, **Fix batch settings**, or **Fix settings** that takes you to the item. **Update pending**: A destination that isn't a dataset (for example, an export) has new source data available. Each row shows: - "Update pending" - View name · row count · export type (for example, *66,943 rows · Export: MySQL*) **Actions:** **Update** triggers the update immediately. The row can also show **Copy link to clipboard** for a Live Link. After a successful update, a toast reads "Update data". **Pipeline changes pending**: A pipeline has draft changes that have not yet been applied. Each row shows: - "Pipeline changes pending" - Dataset - view name · task count (for example, *6 tasks ready to run* or *10 tasks ready to run*) Pipelines with errors surface at the top of this list. **Action:** **Go to View** opens the pipeline in the Data Editor to review or apply changes. > **Note:** If an update fails for some items, a toast appears: *"Some of the pending items could not be updated. Please verify them."* ### Pending Retentions Data retention policies that are waiting for approval. The section shows the notice "These actions will permanently delete or suspend data once approved. Review each policy carefully before approving." Use **Review and Approve** to inspect and approve each policy. Rows are labeled "pending deletion" or "pending suspension". ### Governance Appears when pipelines are paused at approval gates or data quality checks have failed. | Item | Row detail | Action | | --- | --- | --- | | **Checkpoint: approval required** | Dataset · pipeline name · "Task {X} of {Y} is waiting for approval" | Approve | | **Data check failed** | Dataset · pipeline name · "{X} of {Y} checks failed" | Review | Governance items count toward the Needs Attention badge total. Checkpoints and data checks are configured as tasks in the Visual Pipeline Builder. ## Running **What it shows:** All pipeline views, export tasks, and Automations currently executing or queued. **Empty state:** Checkmark icon · "Nothing running" · "No tasks are processing right now." The empty state appears only when there are no running rows and no Active Retentions. When rows are present, a status banner appears at the top: | Banner | Meaning | | --- | --- | | **Executing** (green dot) | Tasks are running and progressing normally | | **Stuck** (red dot) | One or more tasks have exceeded expected duration thresholds; the banner reads "All active pipeline and export tasks across the workspace appear here. Tasks that have been running for an unusually long time may be marked as stuck." | Each row shows the item name (clickable link to open in Data Editor), a status pill, and detail text on the right. A **Show in workflow** icon button opens the item's workflow. **Status pills:** | Status | What it means | | --- | --- | | **Queued** | Waiting for a worker; will start automatically | | **Executing** | Actively processing right now | | **Waiting for Worker** | No worker currently available | | **Registering Lock** | Acquiring a resource lock before processing | | **Waiting for Lock** | Another task holds the lock; starts when released | | **Stuck** | Task has likely hung—see [Understanding Stuck status](#understanding-stuck-status) | Automation detail text (shown per row as caption): | Phase | Text shown | | --- | --- | | Collecting files | *{N} file(s) collected* | | Validating | *Validating {processed} / {total} files* | | Appending | *Appending {N} files* | | Finalizing | *Finalizing...* | Automation task type labels: | Label | What it is | | --- | --- | | **Dataset Refresh** | A scheduled cloud dataset refresh | | **Data Consolidation** | A file consolidation run | | **File Collection** | A cloud storage file retrieval run | | **Messaging** | A scheduled email send | | **Add File as Batch** | Adding a file as a new data batch | | **Delete Batches** | Batch cleanup operation | | **Cloud Storage Retrieval** | Fetching files from cloud storage | | **Run Pipeline** | Pipeline execution task | | **Tag File** | File tagging during retrieval | ### Active retentions Below the task rows, an **Active Retentions** section lists data retention policies that are running. Each row shows the dataset name, **Deleting** or **Suspending** with the rule, and a progress bar with the number of affected batches out of the total batches. A search box filters the list by dataset name. ### Understanding Stuck status A task is flagged **Stuck** when Mammoth determines it is unlikely to complete on its own: | Condition | Threshold | | --- | --- | | Waiting for Worker | > 10 minutes | | Registering Lock | > 5 minutes | | Executing | > 5 hours | | All tasks Waiting for Lock with none younger than 5 minutes | Triggered immediately | To resolve a Stuck task: 1. Click the linked name to open the view in the Data Editor 2. Go to the **Activity Log** tab and filter by category and date range 3. Read the error—common causes: expired connector credentials, deleted source dataset, schema mismatch upstream 4. Fix the root cause, then return to Monitor to confirm the next run clears ## Paused **What it shows:** All pipeline tasks (such as joins, lookups, crosstabs, and sends to another dataset), exports, Mammoth Managed DB publishes, and live links where Auto-sync has been turned off. When Auto-sync is off, upstream data changes do not flow through automatically, so downstream datasets may be stale. > Items intentionally paused via Auto-Sync controls. These are working as configured. Review periodically to ensure nothing is left paused accidentally. ![Paused tab listing four items, each with Source and Auto-sync OFF text and a Turn Auto-sync ON button](https://mammoth.io/docs/images/20260805_050003_M-Paused1.webp) **Empty state:** Checkmark icon · "Nothing paused" · "Every task is syncing automatically." Each row shows: - Dataset name - view name (clickable link) - Operation type · Auto-sync OFF - **Turn Auto-sync ON** button When **Turn Auto-sync ON** is clicked, the button becomes disabled and the status changes to "Auto-sync on, syncing now" while the toggle is applied. The row clears once sync is active. **Operation types:** | Type | What it represents | | --- | --- | | **Join** | A join task | | **Lookup** | A lookup task | | **Crosstab** | A crosstab task | | **Send to Dataset** | A task that sends data to another dataset | | **Export (connector name)** | Export to an external destination (for example, *Export BigQuery* or *Export Snowflake*) | | **Mammoth Managed DB** | A view published as a Mammoth Managed database | | **Live link** | A published live data link | Rows are sorted by dataset name, then view name. > **Before re-enabling:** Verify the upstream data is still structurally compatible—otherwise the task may error immediately. ## Activity Log tab **What it shows:** A chronological record of actions in your workspace, such as creating datasets, editing pipelines, changing Automations and connections, and inviting or removing users. ![Activity Log tab with Project and Workspace buttons, an Export button, and rows for events such as Rerun view and Create dataset](https://mammoth.io/docs/images/20260805_050027_M-AL1.webp) > This tab requires the **View Activity Log** workspace permission. If you do not see it, contact your Workspace Owner. For the full filtering, export, and compliance reference, see the [Activity Log reference](https://mammoth.io/docs/learn/monitor/activity-log/). ## How often Monitor refreshes Monitor polls automatically, so you never need to refresh it manually. | State | Interval | | --- | --- | | Monitor page open | Every 5 seconds | | Monitor page closed (modal background) | Every 45 seconds | When you navigate away from Monitor but keep the page in the background, polling reduces to conserve resources. Polling resumes at 5-second intervals as soon as you return to the Monitor page. Items that complete between polls disappear on the next refresh. This is expected. ## Permissions | Condition | Behavior | | --- | --- | | View-only workspace | Monitor sidebar item disabled | | Guest / anonymous user | Monitor hidden entirely | | Workspace not yet prepared | Monitor sidebar item disabled | | No projects you belong to | Monitor sidebar item disabled | | No View Activity Log permission | Activity Log tab not shown | ## Troubleshooting **A pipeline I triggered isn't showing in Running**\ Monitor refreshes every 5 seconds. Fast pipelines may finish before the next poll. **"Some of the pending items could not be updated. Please verify them."**\ One or more batch updates failed. Check each item individually. **An Automation appears Stuck in Running**\ Click the item name to open its detail page. Common causes: expired Live Connection credentials, a deleted source dataset, or a file format change in the source folder. **A Checkpoint is not clearing after I approve it**\ The pipeline resumes automatically after approval. If it doesn't clear within a few minutes, open the pipeline from the Errors section or the Data Editor to check the next run. --- # Connector performance and best practices URL: https://mammoth.io/docs/learn/performance/connector-optimization/ · Updated: 2026-11-02 Make Live Connection refreshes faster and more reliable: select only needed columns, pull incrementally, schedule off-peak, and troubleshoot timeouts. Live Connections let Mammoth query your databases, SaaS tools, and cloud storage directly at refresh time. How you configure those connections, including what data you request and when, affects how fast your pipelines run and how reliably your automations complete. This page is for technical users and administrators who manage Live Connections. Start with [Reduce data at the source](#reduce-data-at-the-source). ## How Live Connection refresh works When a Dataset Refresh automation runs, Mammoth queries your source system and loads the result into the connected dataset. The entire pipeline attached to that dataset then re-executes on the new data. This means two factors control performance: 1. **How much data is transferred** from the source system to Mammoth 2. **How the pipeline processes** that data after it arrives This page focuses on factor 1. For pipeline processing, see [Pipeline optimization](https://mammoth.io/docs/learn/performance/pipeline-optimization/). ## Reduce data at the source The most effective optimization for Live Connections is requesting less data from the source system, not processing it faster after it arrives. ### What "at the source" means in Mammoth A pipeline's **Conditional Filter** task runs against the copy of your data that a Dataset Refresh already pulled into Mammoth—it does not reach back and re-query your source system. Placing a Conditional Filter early in the pipeline still matters a great deal for processing speed (see [Pipeline optimization](https://mammoth.io/docs/learn/performance/pipeline-optimization/#core-principle-1-filter-early)), but it does not, by itself, reduce how much data is transferred from your database on each refresh. The two levers that actually reduce data transferred from the source are **incremental refresh** (below) and **column selection** (below). Both are configured on the connection/automation itself, not on the pipeline. ### Select only the columns you need If your Live Connection pulls all columns from a wide table but your pipeline only uses 8 of 45 columns, you're transferring 37 columns of data on every refresh for no benefit. **For SQL connectors:** Edit the connection query to select only the columns your pipeline uses. Remove any `SELECT *` patterns and explicitly list the needed columns. **For SaaS connectors (such as Salesforce):** Use field selection in the connector configuration to limit which fields are returned by the API. Reducing column count directly reduces transfer size and downstream processing overhead. ## Incremental refresh For datasets that grow over time, such as transaction logs, event streams, and CRM records, refreshing the full table on every run is wasteful. Incremental refresh pulls only new or changed records instead of the full table. **Native incremental pull (where supported):** for connectors that support it, set the **Update method** to **Add new data** and choose a **Key column**, a column with incremental values such as an ID or date. New data is added based on that column instead of replacing the whole dataset. Check your connector's configuration screen for this option. **Parameter-driven fallback:** if your connector doesn't expose a native incremental option, you can approximate the same effect at the pipeline level: **Prerequisite**: You have a Live Connection and can edit its dataset's pipeline. 1. Create a Dataset Refresh automation for your Live Connection 2. In the pipeline attached to the dataset, add a **Conditional Filter** as the first task with a date condition (for example, `created_date > last_30_days`, or a Mammoth parameter tracking the last run timestamp) 3. Schedule the automation at the frequency you need **Expected result**: Each refresh passes only recent rows through the rest of the pipeline. Note that this fallback still pulls the full table from the source on every refresh. The filter reduces what flows through the rest of your pipeline, not what's transferred from the source. See [above](#what-at-the-source-means-in-mammoth). Prefer the native option whenever your connector supports it. Related: [Dataset Refresh](https://mammoth.io/docs/learn/automations/dataset-refresh/) and [Automations](https://mammoth.io/docs/learn/automations/). ## Scheduling for performance When you schedule Dataset Refresh automations matters, both for your own pipeline performance and to avoid impact on your source systems. ### Off-peak scheduling | Time window | Recommended use | | --- | --- | | Business hours | Light refreshes only; critical updates | | Evening / overnight | Large dataset refreshes, historical backfills, full-table pulls | | Weekends | Weekly aggregations, full refresh operations | **Why it matters:** Large source systems (ERP, databases, Salesforce) often have maintenance windows, rate limits, and peak-usage periods. Scheduling Mammoth refreshes during off-peak hours reduces contention and improves reliability. ### Stagger concurrent automations If you have multiple Dataset Refresh automations, avoid scheduling them all at the same time. A pile-up of simultaneous refreshes competes for the same source-system connections and processing capacity. Staggering start times keeps each refresh completing within its expected window. ### Run related refreshes in sequence When one dataset depends on another (for example, a customer master that feeds into a transaction analysis dataset), select both datasets in a single Dataset Refresh automation and choose **In a sequence**. The refreshes then run one after another in the numbered order, which you can change by dragging. **In parallel** runs all refreshes at once. Related: [Managing automations](https://mammoth.io/docs/learn/automations/managing-automations/). ## Monitoring Live Connection performance Monitor's Running tab shows currently running automations and pipeline executions. If a Dataset Refresh is taking longer than expected, check Monitor to see its current status and whether it is flagged **Stuck**. Related: [Monitor](https://mammoth.io/docs/learn/monitor/) and the [Activity Log reference](https://mammoth.io/docs/learn/monitor/activity-log/). ## Troubleshooting slow or failing Live Connections ### Connection timing out **Symptom:** Dataset Refresh fails with a timeout error. **Likely cause:** The source query is pulling too much data, or the source system itself is under load. Timeout thresholds vary by connector (for example, BigQuery allows up to 5 minutes for a query and up to 1 hour for a long-running job). **Fix:** 1. Switch to incremental refresh (native, if your connector supports it) so each run pulls less data 2. Reduce the columns requested by the connection to cut transfer size 3. Check whether your source database has indexes on the columns used by your incremental pull or connection query, because unindexed columns cause full table scans 4. If timeouts persist, contact Mammoth support with the connection ID ### Refresh taking longer each week **Symptom:** A Dataset Refresh that used to complete in 3 minutes now takes 15 minutes. **Likely cause:** The source table is growing and you're doing a full pull each time. **Fix:** Switch to incremental refresh (native if your connector supports it, or the parameter-driven fallback otherwise) so each run only pulls new records instead of the full table. ### Automation fails intermittently **Symptom:** The same automation succeeds most of the time but fails occasionally. **Likely cause:** Source system rate limits, maintenance windows, or transient network issues. **Fix:** 1. Reschedule the automation to avoid source system maintenance windows or peak usage periods 2. Check **Monitor** for failed runs, and re-run the automation once the source is available again ## Best practices checklist **Connection configuration:** - [ ] Selected only the columns your pipeline uses (no `SELECT *`) - [ ] Set up native incremental pull, or a parameter-driven fallback, to limit rows transferred on each refresh - [ ] Scheduled refreshes during off-peak hours **Monitoring:** - [ ] Checked Monitor regularly for failed or stuck refreshes - [ ] Staggered multiple automations to avoid concurrent queuing **Pipeline:** - [ ] Conditional Filter is early in your pipeline (reduces processing time, though not the data transferred from the source; see [Pipeline optimization](https://mammoth.io/docs/learn/performance/pipeline-optimization/)) --- # Performance URL: https://mammoth.io/docs/learn/performance/ · Updated: 2026-11-02 Speed up Mammoth pipelines and Live Connection refreshes: filter early, use Draft mode, prefer Lookup over Join, and check storage and upload limits. Mammoth runs all processing server-side, so your browser is not the bottleneck. How you structure your pipelines directly affects how fast they run. This section is for analysts and technical users working with large datasets. This page covers the highest-impact optimizations and the platform limits. Start with [Filter early](#the-highest-impact-optimization-filter-early), then go deeper in the child pages: - [Pipeline optimization](https://mammoth.io/docs/learn/performance/pipeline-optimization/): Order tasks, optimize joins, and use Draft mode. - [Connector performance and best practices](https://mammoth.io/docs/learn/performance/connector-optimization/): Reduce the data a Live Connection transfers and schedule refreshes. ## Dataset size guidance The more rows a task has to process, the longer it takes. On large datasets, reduce rows and columns early, and use Draft mode when you build or change several tasks at once. | Dataset size | Recommended approach | | --- | --- | | Smaller datasets | Standard pipelines work well with no special optimization | | Millions of rows | Apply Conditional Filter and Remove Column tasks early; aggregate for dashboards | | Very large datasets | Use cloud connectors (such as BigQuery or Snowflake) rather than file upload; aggregate Views before building dashboards. Discuss architecture with [support@mammoth.io](mailto:support@mammoth.io) if performance is still unacceptable | ## The highest-impact optimization: Filter early The earlier you reduce your row count in a pipeline, the faster every subsequent task runs. **Slow pattern**: ```plaintext All 5M rows → Join with pricing table → Conditional Filter: keep current year only ``` **Optimized pattern**: ```plaintext All 5M rows → Conditional Filter: keep current year only → Join with pricing table (now 400K rows) ``` Moving the filter before the join reduces the join input by over 90% in this example, so the join runs proportionally faster. ## Pipeline optimization checklist | Optimization | When it helps | | --- | --- | | **Filter rows early** | Any pipeline with joins, pivots, or Math Functions on large datasets | | **Remove unused columns early** | After importing wide datasets you don't need all of. Add a Remove Column task right after the source | | **Use Draft mode for multi-task changes** | When building several new tasks on a large dataset | | **Use Lookup instead of Join for single-column matching** | Lookup retrieves one value from another View by a matching key and returns at most one match per row, so it can't multiply rows. Use Join when you need several columns or specific Inner, Left, Right, or Outer behavior | | **Avoid repeated joins to the same dataset** | Cache the join result as a new Dataset instead | | **Schedule refreshes off-peak and stagger them** | For automations refreshing large Live Connection sources. Refreshes that start at the same moment compete for resources, so see [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/) | ## Draft mode Draft mode lets you queue multiple pipeline tasks and run them all at once, rather than executing each task immediately as you add it. This avoids re-running the full pipeline after every individual change. **When to use it:** Building or redesigning pipelines on large datasets, or when testing a sequence of new tasks before committing. **How to enable:** Open the pipeline view and turn on **Draft mode** in the **More Pipeline options** menu (the `...` menu in the pipeline toolbar). New tasks stay pending, and the pipeline shows **Pending Updates**. Open it and click **Apply now** to apply them together, or **Discard** to drop them. ## Live Connections and incremental refresh Live Connections (databases, APIs) query your source system at refresh time. Two optimizations matter most: - **Incremental refresh**: pull only new or changed records instead of the full table on every refresh, either through a connector's native incremental-pull configuration or a parameter-driven Conditional Filter as a fallback - **Column selection**: request only the columns your pipeline actually uses at the connection level, not the pipeline level A pipeline-level Conditional Filter reduces *processing* time once data has arrived, but does not reduce how much data Mammoth requests from your source system. See [Connector performance and best practices](https://mammoth.io/docs/learn/performance/connector-optimization/) for the full breakdown. Related: [Dataset Refresh](https://mammoth.io/docs/learn/automations/dataset-refresh/) and [Automations](https://mammoth.io/docs/learn/automations/). ## Monitoring with Monitor When a pipeline or automation is running, **Monitor** (in the left sidebar) shows: - **Needs Attention**: errors, pending data, and governance items (pipeline checkpoints, failed data checks) waiting on you - **Running**: pipelines, tasks, and automations currently executing - **Paused**: pipeline tasks, exports, and connections with Auto-sync off - **Activity Log**: a chronological event history (visible if your role has activity log access) You don't need to stay on the page. Mammoth runs processing server-side. See [Monitor](https://mammoth.io/docs/learn/monitor/) for details. ## Platform limits reference | Resource | Guidance | | --- | --- | | Storage | Limited by your plan. See **Workspace Settings → Plan & Storage** for your allowance and per-dataset usage. | | File upload size | Uploading files from your computer is limited to 50 MB per upload request. BI workbook imports (Tableau `.twbx`, Power BI `.pbix`) support up to 1 GB. See [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/). | | BigQuery query timeout | 5 minutes per query, and 1 hour for a long-running job. Contact Mammoth support if a connector's timeout is interrupting your workflow. | Contact your account team for the limits that apply to your workspace and plan. ## When performance issues persist If a pipeline is consistently slow after applying these optimizations, work through [Performance issues](https://mammoth.io/docs/learn/troubleshooting/performance-issues/#still-not-resolved) to diagnose the slow task and contact support. --- # Pipeline optimization URL: https://mammoth.io/docs/learn/performance/pipeline-optimization/ · Updated: 2026-11-02 Speed up Mammoth pipelines: filter early, order tasks from light to heavy, remove unused columns, avoid join fan-out, and use Draft mode. Two techniques account for most performance gains: **filter early** and **sequence transforms from light to heavy**. Everything else refines those two principles. This page is for analysts and technical users who build pipelines on large datasets. Start with [Filter early](#core-principle-1-filter-early). ## Understanding pipeline execution Mammoth executes your pipeline top to bottom, passing the full row set through each transformation in sequence. Every row that exists at task N gets processed at task N+1. Row count at each stage directly controls how much work later tasks must do. **The implication:** A Conditional Filter at task 2 that removes 70% of rows makes every task after task 2 process only 30% of the data. ## Core principle 1: Filter early Place **Conditional Filter** tasks as early as possible in your pipeline—ideally as the first or second transformation after Source. **Slow**: ```plaintext Source: 2M rows → Join with customer table (2M × customer table) → Math Function: calculate margin (2M rows) → Conditional Filter: keep active accounts only (removes 60%) → Group & Aggregate (800K rows) ``` **Optimized**: ```plaintext Source: 2M rows → Conditional Filter: keep active accounts only (→ 800K rows) → Join with customer table (800K × customer table — 60% less work) → Math Function: calculate margin (800K rows) → Group & Aggregate (800K rows) ``` The filter moved from task 4 to task 1. The Join now operates on 800K rows instead of 2M, a 60% reduction in join cost. Every later task benefits. **Combine multiple conditions into one filter.** A single Conditional Filter with several conditions keeps the pipeline short and easier to read than several separate filters in a row. ## Core principle 2: Sequence transforms from light to heavy Order transformations so the cheapest operations run first and reduce the dataset before expensive operations process it. | Category | Transforms | Why | | --- | --- | --- | | **Light—run early** | Conditional Filter, Remove Column, Convert Column Type | Reduce rows or columns, or change a type | | **Medium** | Text Formatting, Label & Insert Values, Fill Missing Values, Bulk Replace | Work through every remaining row | | **Heavy—run late** | Join, Lookup, Group & Pivot, Window function, Math Function on many columns | Combine tables or compute across rows | **Recommended sequence for most pipelines:** 1. Conditional Filter (reduce rows) 2. Remove Column / Column selection (reduce width) 3. Data type conversions 4. Text standardization (Bulk Replace, Text Formatting) 5. Enrichment (Join, Lookup) 6. Calculations (Math Function, Add Column) 7. Aggregation (Group & Pivot, Window function) ## Core principle 3: Remove unused columns early Wide datasets carry more data through every later task. Use **Remove Column** right after Source to keep only the columns your pipeline actually needs. **Example:** A source with 47 columns but your analysis needs only 10. Removing the 37 unused columns immediately after Source means every downstream task handles less data. ## Join optimization Joins are the most common performance bottleneck. Three rules apply: **1. Filter both datasets before joining.**\ The Join operation processes every row in dataset A against every row in dataset B that shares the join key. Reducing either input directly reduces join work. **2. Use Lookup instead of Join for single-column key matching.**\ When you're matching on a single column and expect one-to-one matches (for example, adding a product name from a reference table), Lookup avoids accidental row multiplication. **3. Check for duplicate join keys.**\ If your join key has duplicates on either side, the result can multiply rows (a "fan-out"). A dataset with 100K rows joined to a reference table where each key appears 5 times produces 500K rows—every later task processes 5× the expected volume. Use **Remove Duplicate Rows** on the reference dataset before joining if needed. **Mammoth rejects a join that bloats the row count.** Join estimates the resulting row count before running. When the projected output exceeds both 100,000 rows and 5× the larger of your two input row counts, the join fails with a row-count error instead of running. If you see that error, check for duplicate keys on both sides and remove duplicates or filter first. Lookup doesn't need this safeguard—it's designed to always return at most one match per input row, so it can never fan out row counts, which is the other reason to prefer it over Join for simple one-to-one enrichment. ## Draft mode Draft mode keeps new pipeline tasks pending and applies them all at once when you're ready, instead of running the full pipeline after every individual addition. **When Draft mode helps:** - Building several new tasks on a large dataset - Redesigning a section of an existing pipeline - Testing a new transformation sequence before committing **How it works:** 1. Open the pipeline view and turn on **Draft mode** in the **More Pipeline options** (`...`) menu in the pipeline toolbar 2. Add your new transformations. They stay pending and don't take effect yet. 3. When ready, open **Pending Updates** and click **Apply now**. The pending tasks are applied together. **Review** shows the pending changes, and **Discard** drops them. **Expected result**: The pipeline runs once with all the new tasks applied. ## Structuring long pipelines Pipelines with many tasks benefit from splitting into multiple views, where each view handles a distinct processing stage—both for performance and for maintainability. Use intermediate **Send to Dataset** tasks if a complex sub-pipeline is shared by multiple views. **Architecture pattern:** ```plaintext Source dataset └── View 1: Data quality (filter, clean, standardize) └── View 2: Enrichment (joins, lookups) └── View 3: Calculations and output ``` Each view can be independently monitored and run. This also makes troubleshooting easier—if a stage fails, the error is isolated. ## Monitoring pipeline performance Open **Monitor** from the left sidebar. The **Running** tab shows pipelines, tasks, and automations that are executing or queued, and flags a task as **Stuck** if it runs unusually long. The **Needs Attention** tab lists failed runs. ### When a pipeline is consistently slow 1. Check **Monitor** for a **Stuck** status or failed runs 2. Look for the slowest task: Join operations are the most common culprit 3. Check for duplicate join keys that might be causing row fan-out 4. Move any Conditional Filter tasks earlier in the sequence 5. Contact Mammoth support with the pipeline ID if the issue persists. The support team can inspect server-side execution logs See [Monitor](https://mammoth.io/docs/learn/monitor/) for details. --- # Creating a project URL: https://mammoth.io/docs/learn/projects/create-project/ · Updated: 2026-11-02 Create a Mammoth project, set its name, color, date handling, and access level, then leave or delete it. Includes who can delete a project. This page is for Workspace Owners and Workspace Members who need a new project. It covers creating a project, then leaving or deleting one. Any workspace member can create a project, and you are automatically assigned **Project Admin** on projects you create. **Prerequisite**: You are a member of the workspace. ## How to create a project ### Step 1: Open the project selector In the **Data Library**, click the down arrow next to the current project name in the breadcrumb at the top of the page. The project selector opens, showing all projects you have access to. ![Project selector dropdown listing projects with the Admin role and a New Project option at the bottom](https://mammoth.io/docs/images/20260505_095708_Screenshot2026-04-301602561.webp) ### Step 2: Click New Project Below the project list, click **New Project**. The **New Project** modal opens. ![New Project modal with project name, color picker, the Set how this project handles dates checkbox with its Day first DD-Mon-YYYY summary, Who can access dropdown, Cancel, and Create Project button](https://mammoth.io/docs/images/20261009_094700_NewProjectModal.webp) ### Step 3: Configure the new project Fill in the fields in the creation modal: | Field | Details | | --- | --- | | **Project Name** | Required. Up to 63 characters. A descriptive name helps teammates identify the project. Pre-filled with "Untitled project". | | **Color** | Select from 8 preset colors. A random color is pre-selected each time you open the modal. Use color to visually differentiate projects in the project selector. | | **Set how this project handles dates** | Checked by default on a new project. Choose how Mammoth reads ambiguous dates in uploaded files (**Day first** or **Month first**) and the starting display format for new date columns (default `DD-Mon-YYYY`). **Month first** is preselected if your browser time zone is in the US, otherwise **Day first**. Clear the checkbox to skip date settings. See [Project Settings](https://mammoth.io/docs/learn/projects/project-settings/#date-handling). | | **Who can access** | Set initial visibility. New projects start as **Only me**. See [Access levels](#access-levels) below. | ### Step 4: Add members (if applicable) If you select **"Some people in this workspace"** for access, a user list appears. Search for workspace users, assign each a role (Project Admin or Project Editor), and they will be added when you create the project. ### Step 5: Create the project Click **Create Project**. **Expected result**: The project is created immediately and you are switched into it. ## Access levels Set who in the workspace can see and work in the project: | Option | Who has access | | --- | --- | | **Everyone in this workspace** | All current workspace members, plus any members added to the workspace in the future | | **Some people in this workspace** | Only the users you select—you control the list explicitly | | **Only me** | Just you. No other workspace members can access this project until you share it. | You can change the access level at any time after creation. See [Project Settings](https://mammoth.io/docs/learn/projects/project-settings/). ## What happens after creation - You are **automatically added as Project Admin**. - The project appears immediately in the project selector dropdown. - If you chose "Some people in this workspace," the selected users are added in the same operation. - If you chose "Everyone in this workspace," all current workspace members are added. - You can start adding datasets and automations right away. ## Project naming tips Good project names help teammates identify a project quickly. **Clear and descriptive:** - "Marketing Analytics - Q2 2025" - "Finance Reporting - FY2025" - "Customer Insights - Product Team" - "Sales Pipeline" **Avoid vague names:** - "Project 1" or "Test" - "My Data" - Single letters or abbreviations without context ## Managing a project ### Open the project manage menu Click the **More options** (three dots) button next to any project in the project selector. The menu shows actions available to you based on your role. ![Project menu with Project Settings, Manage Users, Leave Project, and Delete Project in red](https://mammoth.io/docs/images/20260505_095956_Screenshot2026-04-301604531.webp) | Menu item | Who sees it | What it does | | --- | --- | --- | | **Project Settings** | Project Admins | Opens the settings modal to rename, recolor, change date settings, or change access | | **Manage Users** | Project Admins, Workspace Owners | Opens the user management modal | | **Leave Project** | Any project member | Removes your own access to the project | | **Join Project** | Workspace Owners who are not members | Adds you to the project as **Project Admin** | | **Delete Project** | Project members (greyed out unless you are a Project Admin) and Workspace Owners | Permanently deletes the project and all its contents | ## Leaving a project **Prerequisite**: You are a member of the project. 1. Open the project selector dropdown. 2. Click **More options** (three dots) next to the project. 3. Click **Leave Project**. 4. Confirm in the dialog: *"Are you sure you want to leave {project name}? You will lose access to the Project and its contents."* 5. Click **Leave**. **Expected result**: Your access is removed immediately. ## Deleting a project Deleting a project permanently removes it and all its datasets, automations, and contents for all users. > **This action is irreversible.** There is no undo. **Prerequisite**: You are a Project Admin on the project or a Workspace Owner. 1. Open the project selector dropdown. 2. Click **More options** (three dots) next to the project. 3. Click **Delete Project** (shown in red). 4. In the confirmation dialog, type `DELETE` (all caps) to confirm. 5. Click **Delete**. **Expected result**: The project and its contents are permanently removed. ### Who can delete a project - **Project Admin** on that project - **Workspace Owner** (even without being a project member) If you see the **Delete Project** option greyed out with the tooltip *"You need to join the project as an admin to delete it"*, you do not currently have the required role. ## Frequently asked questions **Q: Can all workspace users create projects?**\ A: Yes. Workspace Owners and Workspace Members can both create projects. **Q: What role do I get on a project I create?**\ A: You are automatically assigned **Project Admin** on any project you create. **Q: Can I change the project name or color after creation?**\ A: Yes. Open the project manage menu, then click **Project Settings** to edit name, color, date settings, and access at any time. **Q: What is the project name character limit?**\ A: 63 characters. **Q: What do the date settings do?**\ A: **Reading dates in uploaded files** tells Mammoth how to interpret ambiguous dates (for example, `06/12/2025`) in CSV, Excel, and PDF files uploaded to this project: **Month first** reads it as 12 June, **Day first** as 6 December. **Showing dates** sets the starting format for new date columns. ## Related articles - [Project settings](https://mammoth.io/docs/learn/projects/project-settings/): Edit name, color, date handling, and access - [Sharing a project](https://mammoth.io/docs/learn/projects/project-sharing/): Add teammates and manage their roles - [Project roles and permissions](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/): What each role can do - [Projects overview](https://mammoth.io/docs/learn/projects/): Understanding projects in Mammoth --- **Need help?** Check the [troubleshooting guide](https://mammoth.io/docs/learn/troubleshooting/) or contact Mammoth Support. --- # Projects URL: https://mammoth.io/docs/learn/projects/ · Updated: 2026-11-02 Projects group datasets and automations in a Mammoth workspace and control who can access them. Learn access levels, project roles, and the core project tasks. This section explains projects for Workspace Owners, Workspace Members, and Project Admins. Start with [Creating a project](https://mammoth.io/docs/learn/projects/create-project/) if you need a new project, or read the concepts below first. A **Project** is an organizational container within a Mammoth workspace. It groups related datasets and automations together and controls who on your team can access them. > Every dataset in Mammoth belongs to exactly one Project. ## What projects do Projects let you: - **Organize data**: Group datasets and automations that belong to the same initiative, team, or business area - **Control access**: Decide who in your workspace can see and edit each project - **Set shared defaults**: Choose how the project reads ambiguous dates in uploaded files (day first or month first) and the starting display format for new date columns ## Project concepts ### How workspaces and projects relate ```plaintext WORKSPACE └── Project A (e.g. "Marketing Analytics") │ ├── Dataset: Campaign Performance │ ├── Dataset: Ad Spend │ └── Automation: Weekly Report Refresh │ └── Project B (e.g. "Finance Reporting") │ ├── Dataset: Revenue by Region │ └── Dataset: Budget vs Actuals │ └── Project C (e.g. "Product Insights") └── Dataset: User Engagement ``` A workspace can contain many projects. Each project is independent. Its datasets, access settings, and team members are configured separately. ### Access levels When you create or edit a project, you set who can see it: | Access level | Who can see it | | --- | --- | | **Everyone in this workspace** | All current and future workspace members | | **Some people in this workspace** | Only the users you explicitly select | | **Only me** | Only you (the project creator/admin) | You can change access at any time from Project Settings. ### Project roles Two roles control what people can do inside a project: | Role | What they can do | | --- | --- | | **Project Admin** | Manage settings, share the project, add or remove members, delete the project, plus all Editor capabilities | | **Project Editor** | Access and work with all data and pipelines in the project | For the full permission breakdown, see [Project roles and permissions](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/). ## Project lifecycle ```plaintext CREATE PROJECT ↓ SET ACCESS LEVEL (Everyone / Some people / Only me) ↓ INVITE COLLABORATORS (if needed) ↓ ADD DATASETS & AUTOMATIONS ↓ MANAGE SETTINGS (rename, recolor, update access) ↓ SHARE WITH NEW MEMBERS (as team grows) ↓ DELETE PROJECT (when no longer needed; irreversible) ``` ## Core tasks | Task | Where to go | | --- | --- | | [**Create a new project**](https://mammoth.io/docs/learn/projects/create-project/) | Project selector → New Project | | [**Change project name, color, or date settings**](https://mammoth.io/docs/learn/projects/project-settings/) | Project manage menu → Project Settings | | [**Change who can access the project**](https://mammoth.io/docs/learn/projects/project-settings/#settings-reference) | Project manage menu → Project Settings | | [**Add or remove team members**](https://mammoth.io/docs/learn/projects/project-sharing/) | Share button (top-right) or Project manage menu → Manage Users | | [**Change a user's role**](https://mammoth.io/docs/learn/projects/project-sharing/#changing-a-users-role) | Share Project modal → role dropdown next to each user | | [**Leave or delete a project**](https://mammoth.io/docs/learn/projects/create-project/) | Project manage menu → Leave Project / Delete Project | | [**Understand what each role can do**](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/) | Project roles and permissions reference | ## Who can create projects All workspace roles can create projects: - Workspace Owner - Workspace Member The creator is automatically assigned the **Project Admin** role on the new project. ## In this section - [Creating a project](https://mammoth.io/docs/learn/projects/create-project/): Create a project, then leave or delete it - [Project settings](https://mammoth.io/docs/learn/projects/project-settings/): Configure name, color, date handling, and access - [Sharing a project](https://mammoth.io/docs/learn/projects/project-sharing/): Add team members and manage their roles - [Project roles and permissions](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/): Full permission reference For workspace-level settings and users, see [Workspace management](https://mammoth.io/docs/learn/workspace-management/). --- **Need help?** Check the [troubleshooting guide](https://mammoth.io/docs/learn/troubleshooting/) or contact Mammoth Support. --- # Project roles & permissions URL: https://mammoth.io/docs/learn/projects/project-roles-and-permissions/ · Updated: 2026-11-02 Compare what Project Admins and Project Editors can do in a Mammoth project, how roles are assigned, and how workspace roles relate to project roles. This page is for anyone deciding which role to give a teammate, and for Project Admins managing access. Mammoth uses two project roles to control what team members can do inside a project: **Project Admin** and **Project Editor**. Roles are set per project, so a user can be an Admin in one project and an Editor in another. ## Role overview | Role | Description | | --- | --- | | **Project Admin** | Full control over the project: configure settings, manage team members, delete the project, plus all Editor capabilities | | **Project Editor** | Work with data and pipelines: access, create, edit, and manage datasets and automations within the project | ## Permission matrix Project Admins can do everything Project Editors can, plus edit project settings, delete the project, manage project members, and create, update, or delete Live Connections. Editors can view and change datasets, views, pipelines, and Live Connection queries, but cannot manage members or Live Connections themselves. The full workspace, project, and dashboard matrix is on the [Access Control](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix) page. ## Assigning roles Roles are assigned: - **During project creation**: When you set access to "Some people in this workspace", you assign each user a role in the creation modal. - **In the Share Project modal**: Open the Share button or Manage Users from the project menu, then use the role dropdown next to each user's name. - **When adding new members**: The role defaults to Editor; change it immediately after adding. There is no limit on the number of Project Admins a project can have. ## The creator's role The user who creates a project is automatically assigned **Project Admin**. This cannot be changed at creation time. ## Workspace roles and project roles Workspace roles (Owner, Member) and project roles (Admin, Editor) are separate systems. A user's workspace role does not automatically determine their project role, but Workspace Owners have broad project-level overrides: | Workspace role | Project override | | --- | --- | | **Workspace Owner** | Can add users to any project, delete any project, and view all project names—regardless of project membership or role | | **Workspace Member** | No project-level overrides. Access is determined solely by project role assignment | This means: - A **Workspace Owner** can delete any project or add users to it even if they are not a project member. - A **Workspace Member** with no project role cannot see a project set to "Some people" or "Only me". ## Changing a user's role Any **Project Admin** can change another user's role. **Prerequisite**: You are a Project Admin on the project. 1. Open the Share Project modal (Share button in the header, or project menu → Manage Users). 2. Find the user in the "Shared with" list. 3. Click the role dropdown next to their name. 4. Select **Project Admin** or **Project Editor**. **Expected result**: The change takes effect immediately. To remove a user entirely, select **Remove** from the role dropdown. ## Frequently asked questions **Q: Can a Project Editor change project settings?**\ A: No. Editing project settings (name, color, date handling, access level) requires the Project Admin role. **Q: Can a Project Editor add new users?**\ A: No. Only Project Admins (and Workspace Owners) can add users to a project. **Q: Can there be multiple Project Admins?**\ A: Yes. There is no limit on the number of admins per project. Granting Admin to multiple users is recommended to avoid a single point of failure if the primary admin leaves. **Q: What happens if the only Project Admin leaves the project?**\ A: The project still exists but will have no Project Admin. A Workspace Owner can still add users to the project and delete it using workspace-level overrides. Assign a replacement admin before leaving. **Q: Is there a read-only "viewer" role?**\ A: No. The two roles available to users are **Project Admin** and **Project Editor**. **Q: I want to give someone access to view data but not edit it. What role should I use?**\ A: Use **Project Editor**. It is the standard working role for all data access. A read-only viewer role is not currently available in the UI. ## Related articles - [Sharing a project](https://mammoth.io/docs/learn/projects/project-sharing/): Add users and assign roles - [Project settings](https://mammoth.io/docs/learn/projects/project-settings/): Configure access level and project details - [Creating a project](https://mammoth.io/docs/learn/projects/create-project/): Set roles when first creating a project - [Projects overview](https://mammoth.io/docs/learn/projects/): Understanding projects in Mammoth --- **Need help?** Check the [troubleshooting guide](https://mammoth.io/docs/learn/troubleshooting/) or contact Mammoth Support. --- # Project settings URL: https://mammoth.io/docs/learn/projects/project-settings/ · Updated: 2026-11-02 Change a Mammoth project's name, color, date handling, and who can access it. Project Admins only. Includes the settings reference and FAQs. Project Settings control a project's name, color, date handling, and who in your workspace can access it. This page is for Project Admins, the only role that can open and save Project Settings. Start with [Opening project settings](#opening-project-settings). **Prerequisite**: You are a Project Admin on the project. ## Opening project settings 1. Click the down arrow next to the current project name in the Data Library breadcrumb to open the **project selector**. 2. Find the project you want to configure. 3. Click the **More options** (three dots) button next to it. 4. Click **Project Settings**. The Project Settings modal opens. ![Project Settings modal with project name, color picker, the Set how this project handles dates checkbox, Who can access dropdown set to Only me, Cancel, and Save changes button](https://mammoth.io/docs/images/20261009_094543_ProjectSettingsModal.webp) > **Note:** Project Settings is also the same modal used when you create a new project. If you are creating a project for the first time, see [Creating a project](https://mammoth.io/docs/learn/projects/create-project/). ## Settings reference ### Project name | Detail | Value | | --- | --- | | Required | Yes | | Maximum length | 63 characters | Enter a clear, descriptive name that helps your team identify the project at a glance. The name appears in the project selector dropdown across all of Mammoth. ### Color Click the color button next to the project name field to open the color picker. Choose from 8 preset colors: `#6C757C`, `#9CA1AB`, `#02786D`, `#50BBAF`, `#337FBD`, `#FDB020`, `#EB661E`, `#D57C7C` The color appears as a dot beside the project name in the selector and in the Share Project modal header. Use it to visually distinguish projects at a glance. ### Date handling Check **Set how this project handles dates** to configure two things. Select the edit icon next to the summary to change them, then click **Done**. **Reading dates in uploaded files**: Choose how Mammoth reads ambiguous dates such as `06/12/2025`: - **Day first**: `06/12/2025` is 6 December - **Month first**: `06/12/2025` is 12 June This applies to CSV, Excel, and PDF files uploaded to this project. Columns that arrive from database and API connectors are already typed, so this setting doesn't affect them. It doesn't change how dates look. **Showing dates**: Choose the starting display format for new date columns in this project: `DD-Mon-YYYY`, `YYYY-MM-DD`, `MM/DD/YYYY`, `DD/MM/YYYY`, or `Month DD, YYYY`. Existing columns keep their current format, and you can change any column on its own from the column menu. It doesn't change how files are read. These settings apply only to this project. ### Access level The **Who can access** dropdown controls which workspace members can see and work in this project. | Option | Who has access | | --- | --- | | **Everyone in this workspace** | All current workspace members, and all future members added to the workspace | | **Some people in this workspace** | Only the users you explicitly select, shown in the user list below the dropdown | | **Only me** | Only you. Switching an existing project to **Only me** removes every other user from it. | #### Select some people in this workspace When you choose this option, a searchable user list appears below the dropdown. For each user you add: - Search by name or email - Assign a role: **Project Admin** or **Project Editor** - Use the select-all checkbox at the top of the list to select or clear every user at once, or check individual users one at a time Users added here are saved when you click **Save changes**. Changes to user membership are processed alongside the settings update in a single operation. > This bulk, checkbox-based user picker is specific to the Project Settings modal. The Share Project and Manage Users modals (see [Sharing a project](https://mammoth.io/docs/learn/projects/project-sharing/)) only support adding or removing one user at a time. > **Workspace Owners** can see all project names and delete any project, regardless of access level. ## Saving changes Click **Save changes** to apply your changes. **Expected result**: A success toast confirms: *"Project successfully edited."* Changes take effect immediately: - The new name and color appear in the project selector. - Access level changes (adding or removing users) are applied in the same save operation. ## Who can change project settings Only users with the **Project Admin** role on the project can open and save Project Settings. Workspace Owners can manage project membership from the workspace level (Workspace Settings, then User Management) but must join a project as an admin to edit its settings. ## Frequently asked questions **Q: Can I change the project name at any time?**\ A: Yes, as long as you are a Project Admin. The new name takes effect immediately. **Q: Do the date settings change columns that already exist?**\ A: No. **Showing dates** only sets the starting format for new date columns, and existing columns keep their format. **Reading dates in uploaded files** applies to files uploaded to the project. **Q: Can I have more than 8 colors?**\ A: No. The color picker offers 8 fixed preset colors. Custom hex colors are not currently supported. **Q: I can't find "Project Settings" in the menu—why?**\ A: Project Settings is only visible to Project Admins. If you do not see it, you are a Project Editor on this project. Ask a Project Admin to change your role, or have a Workspace Owner join the project as an admin and update your role. **Q: What is the difference between "Everyone in this workspace" and "Some people in this workspace"?**\ A: "Everyone" automatically includes all current and future workspace members—no manual user management needed. "Some people" gives you explicit control, but you must manually add each person and will need to add new workspace members to the project yourself when they join the workspace. ## Related articles - [Sharing a project](https://mammoth.io/docs/learn/projects/project-sharing/): Add or remove individual users and change their roles - [Project roles and permissions](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/): Full permission breakdown for each role - [Creating a project](https://mammoth.io/docs/learn/projects/create-project/): Set these options at project creation time - [Projects overview](https://mammoth.io/docs/learn/projects/): Understanding projects in Mammoth --- **Need help?** Check the [troubleshooting guide](https://mammoth.io/docs/learn/troubleshooting/) or contact Mammoth Support. --- # Sharing a project URL: https://mammoth.io/docs/learn/projects/project-sharing/ · Updated: 2026-11-02 Add workspace users or invite new people to a Mammoth project, change project roles, remove users, and leave a project from the Share Project modal. This page is for Project Admins and Workspace Owners who manage who can work in a project. Sharing a project adds workspace users to it, giving them access to all datasets and automations inside. You can assign each person a role (Admin or Editor) and adjust or remove access at any time. **Prerequisite**: You are a Project Admin on the project or a Workspace Owner. ## Open the Share Project modal There are two ways to open project sharing. Both open the same modal with the same fields and actions. Only the title in the header differs: | Entry point | How to access | Modal title shown | | --- | --- | --- | | **Share button** | Click the **Share** icon in the top-right of the Data Library header | "Share Project" | | **Manage Users** in project menu | Project selector → **More options** (three dots) next to the project → Manage Users | "Manage Project Users" | ### What the modal contains - Add new members by typing names or email addresses. The field placeholder shows the maximum number of users your plan allows. - View all current members with their roles - Change individual roles (Admin/Editor) via dropdown - Remove individual users via the role dropdown **Remove** option - View roles and permissions reference ![Share Project modal for the Export project with Add new members, Shared with list, and Leave Project button](https://mammoth.io/docs/images/20260505_102502_Screenshot2026-04-301607031.webp) ![Manage Project Users modal for the Column Management project with Add new members, a Shared with list, and a Search field](https://mammoth.io/docs/images/20260505_102542_Screenshot2026-04-301607481.webp) > **Note:** This modal removes users one at a time from either entry point; there is no multi-select removal. A bulk, checkbox-based user picker does exist in Mammoth, but it's part of the **Project Settings** modal's "Some people in this workspace" configuration, not here. See [Project settings](https://mammoth.io/docs/learn/projects/project-settings/#select-some-people-in-this-workspace). **When to use**: Add or adjust access for individual people. Use the header **Share** button while you're actively working in the project; use the project menu's **Manage Users** when you want to get there without leaving the project selector. ## Adding users to a project ### Add existing workspace members 1. In the **Add new members** field, type a user's name or email address. 2. Select them from the auto-complete list of workspace users. 3. Optionally add multiple users, separated by a comma, semicolon, space, or new line. 4. Click **Add**. 5. The user appears immediately in the "Shared with" list with the **Editor** role by default. **Expected result**: A success toast confirms: *"The Project was successfully shared."* ![Add new members dropdown open in Manage Project Users, listing workspace emails, some marked invited to the workspace](https://mammoth.io/docs/images/20260505_102815_Screenshot2026-04-301609371.webp) ### Invite someone who is not yet in the workspace If the person you want to add is not yet a workspace member: 1. Type their email address in the **Add new members** field. 2. Click **Add**. 3. Mammoth sends them a workspace invitation **and** adds them to the project in the same operation. 4. They appear in the "Shared with" list as **(pending invitation)** until they accept. ![Manage Project Users showing a pending invitation for a user with the Editor role and a toast saying the project was shared](https://mammoth.io/docs/images/20260505_102959_Screenshot2026-04-301610291.webp) > **Important:** Only users whose role allows inviting external users (Workspace Owners and Project Admins) can invite people who aren't yet in the workspace. If your role doesn't allow it, you will see the message: *"Only workspace owners can add new users. You can only add existing users to this project."* ## User limit The maximum number of users depends on your plan. The **Add new members** field placeholder shows it (for example, "Select users to be added to this project (max 10)"). If adding new users would exceed your plan's limit, Mammoth shows a seat-limit warning and blocks the addition. ## Changing a user's role 1. Find the user in the "Shared with" list. 2. Click the role dropdown next to their name (shows **Admin** or **Editor**). 3. Select the new role. 4. The change takes effect immediately. ![Role dropdown for a user in the Share Project modal with Project Admin checked, Project Editor, and Remove in red](https://mammoth.io/docs/images/20260505_105843_Screenshot2026-04-301747531.webp) See [Project roles and permissions](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/) for what each role can do. ## Removing users Removal works the same way from both the Share Project and Manage Project Users modals, one user at a time: 1. Click the role dropdown next to the user's name (shows **Admin** or **Editor**). 2. Scroll to the bottom of the dropdown menu. 3. Click **Remove** (shown in red). 4. The user is removed immediately. **Expected result**: The user no longer appears in the "Shared with" list. **Note:** On your own row, the last dropdown option reads **Leave Project** instead of **Remove**. It starts the same leave flow as the project menu. ## Pending invitations Users who have been invited to the workspace but have not yet accepted appear in the list as: > **User Name (pending invitation)** Their role is already assigned and will take effect when they accept the invitation. You can change their role or remove them before they accept. ## Leaving or joining a project ### Leaving a project **Leave Project** is a menu item in the project manage (three dots) menu—see [Leaving a project](https://mammoth.io/docs/learn/projects/create-project/#leaving-a-project) for the full flow. In the Share Project and Manage Project Users modals, the same option appears on your own row. ### Joining a project **Workspace Owners** who are not currently project members see a **Join Project** menu item in the project manage menu. Joining adds them to the project as **Project Admin**. ## Viewing roles and permissions At the bottom of the Share Project modal, click **View Roles & Permissions** to open an in-app reference showing what Project Admins and Project Editors can do. ![Roles & Permissions dialog, Project tab, comparing Admin and Editor across General, Users, Data Library, Connectors](https://mammoth.io/docs/images/20260505_103201_Screenshot2026-04-301759201.webp) For the full reference, see [Project roles and permissions](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/). ## Workspace Owner override Workspace Owners can: - Add any user to any project, even if they are not a Project Admin - Manage users on any project from the project manage menu - View all project names in the workspace - Delete any project (even if not a Project Admin) ## How sharing works behind the scenes | Operation | What happens | | --- | --- | | Add existing workspace user | User is added to the project | | Invite new user + add to project | Workspace invitation sent and project membership set | | Change role | Role updated | | Remove user | User's project access is removed | ## Frequently asked questions **Q: Can I share a project with someone outside my workspace?**\ A: You can invite external users by email. Mammoth sends them a workspace invitation and adds them to the project. Workspace Owners and Project Admins can invite external users. **Q: I don't see the "Add new members" section—why?**\ A: The section is only visible to Project Admins and Workspace Owners. If you are a Project Editor, you can view the member list but cannot add users. **Q: What happens to a user's data if I remove them from a project?**\ A: Their access is revoked, but the datasets and automations they contributed remain in the project. Removing a user does not delete their work. **Q: Can I set a user's role when first adding them?**\ A: The role defaults to **Editor** when you add someone. Change it using the role dropdown immediately after they appear in the list. **Q: Why does the user count in "Shared with (N)" include me?**\ A: The count includes all members, including you. Your own entry is marked with "(you)". **Q: Can I transfer Project Admin to someone else?**\ A: Yes. Change another user's role to **Admin** using the role dropdown. There is no limit on the number of admins a project can have. ## Related articles - [Project roles and permissions](https://mammoth.io/docs/learn/projects/project-roles-and-permissions/): Detailed permission breakdown for Admin and Editor - [Project settings](https://mammoth.io/docs/learn/projects/project-settings/): Change project access level (Everyone, Some people, or Only me) - [Creating a project](https://mammoth.io/docs/learn/projects/create-project/): Add initial members during project creation - [Projects overview](https://mammoth.io/docs/learn/projects/): Understanding projects in Mammoth --- **Need help?** Check the [troubleshooting guide](https://mammoth.io/docs/learn/troubleshooting/) or contact Mammoth Support. --- # Access control URL: https://mammoth.io/docs/learn/security-overview/access-control/ · Updated: 2026-11-02 The complete roles and permissions matrix for Mammoth workspace, project, and dashboard roles, plus how access control is enforced. This page is for security reviewers, IT administrators, and Workspace Owners. Start with the [roles and permissions matrix](#roles-and-permissions-matrix) for the permission tables. Mammoth enforces access control at two levels: **Workspace** and **Project**. Workspace roles govern administrative capabilities across the entire tenant. Project roles govern what a user can do with data, pipelines, and connectors inside a specific project. A user can hold a different project role in each project they belong to. Mammoth checks the required permission for every request before the operation proceeds. ## How requests are authenticated Authorization depends on who made the request. Mammoth supports two authentication methods; see [Sign-in and authentication](https://mammoth.io/docs/learn/security-overview/authentication/) for setup. ### User sessions (JWT) User sessions are authenticated with a signed token that Mammoth validates on every request. Each request is scoped to a single workspace through the `X-WORKSPACE-ID` header. CSRF protection is enforced for all browser sessions: an anti-CSRF token is validated on state-mutating requests. API token sessions are excluded from CSRF checks. ### API tokens Programmatic access uses an API token sent as `Authorization: Bearer mm_...`. The token belongs to one workspace, so no workspace header is needed. The token is shown once when it's created and can't be retrieved afterward. The older `X-API-KEY` / `X-API-SECRET` headers are deprecated. See [API authentication](https://mammoth.io/docs/build/auth/) for details. An API token can optionally be scoped to a single project. When scoped, the token can't access any other project within the workspace, and Mammoth enforces this before any resource operation proceeds. ## Roles and permissions matrix This is the complete reference for what each role can do. Other pages summarize roles and link here. In the product, open **View Roles & Permissions** at the bottom of any project role dropdown in the user side panel to see the same permissions in a modal with **Workspace Permissions** and **Project Permissions** tabs. ### Roles at a glance | Level | Role (as shown in the UI) | Scope | | --- | --- | --- | | Workspace | Workspace Owner | The whole workspace. A workspace can have more than one Owner. | | Workspace | Workspace Member | The workspace. Project access requires being added to each project. | | Project | Project Admin | One project. A user can hold a different role in each project. | | Project | Project Editor | One project. | | Dashboard | Dashboard Editor | One dashboard. | | Dashboard | Dashboard Viewer | One dashboard. | ### Workspace roles Workspace roles are assigned by a Workspace Owner and apply across the entire workspace. | Capability | Workspace Owner | Workspace Member | | --- | --- | --- | | **Workspace settings** | | | | Rename or delete the workspace | Yes | No | | Enable or disable upcoming features | Yes | No | | **User management** | | | | Invite users to the workspace | Yes | No | | Modify or remove workspace users | Yes | No | | **Projects** | | | | View all project names (without needing access) | Yes | No | | Assign users to projects they're not already in | Yes | No | | Create a new project | Yes | Yes | | Delete any project (including ones they don't belong to) | Yes | No | | **API keys** | | | | Manage workspace API tokens | Yes | No | | Manage external service API keys | Yes | No | | **Billing** | | | | Manage subscription and payment settings, update the plan | Yes | No | | **Activity log** | | | | View the workspace Activity Log | Yes | Yes | ### Project roles Project roles are assigned per project. A Workspace Member must be explicitly added to a project to access it. Membership in the workspace alone does not grant project access. | Capability | Project Admin | Project Editor | | --- | --- | --- | | **Project settings** | | | | Edit project settings | Yes | No | | Delete the project | Yes | No | | **User management** | | | | Add workspace members to the project | Yes | No | | Invite external users to the project | Yes | No | | Remove users from the project | Yes | No | | **Data Library** | | | | Create, edit, and delete datasets, views, and pipelines | Yes | Yes | | View Data Library items | Yes | Yes | | **Live Connections** | | | | Create, update, or delete Live Connections | Yes | No | | Create or modify queries from Live Connections | Yes | Yes | | View Live Connections and their queries | Yes | Yes | ### Dashboard roles Dashboards have their own sharing model, set in the **Publish & Share** panel of the dashboard. | Capability | Dashboard Editor | Dashboard Viewer | | --- | --- | --- | | Modify the dashboard | Yes | No | | View the dashboard | Yes | Yes | Editors of a dashboard must have access to the same project as the dashboard. See [Publishing and sharing dashboards](https://mammoth.io/docs/learn/dashboard/share-dashboard/) for the steps. Row-level security for dashboards is a plan feature, included on the Pro plan. Whether your workspace has it depends on your plan. ## Authorization enforcement Every request passes two checks before it reaches application logic: 1. **Authentication**: Mammoth validates the session token or API token and establishes the user, workspace, and session type. 2. **Authorization**: Mammoth checks the required permission against the user's role on the target resource. If the check fails, the request is rejected. Authorization also validates resource hierarchy—for example, confirming that the project referenced in a request actually belongs to the workspace in the request context. A user cannot reference a resource from a different workspace, even if they know its ID. ## Workspace isolation Workspaces are the primary tenant boundary. **Database level:** Every major resource (projects, datasets, views, pipelines, connectors, invitations, API keys) belongs to one workspace. Lookups are scoped to the workspace, so a query cannot return another workspace's data. **Session level:** Each request carries a single workspace context. Mammoth verifies that it matches the workspace referenced in the request. A user cannot act on behalf of a workspace they do not belong to. **API key level:** Each API key is bound to a single workspace at creation time. The workspace ID is validated on every API-key-authenticated request. Users can belong to multiple workspaces. Each workspace membership is represented by a separate role record; roles in one workspace have no effect in another. ## Project isolation Within a workspace, projects provide a second isolation boundary. - Datasets, views, pipelines, and Live Connections belong to exactly one project. - Workspace Members must be explicitly assigned to a project to access it. - Workspace Owners can view all project names, delete any project, and assign users to projects they're not part of. - Mammoth checks both workspace membership and project role before granting access to project-scoped resources. - Live Connections are project-scoped. The same physical database can have separate connections in two different projects, and each connection is independently credentialed—users in one project cannot use or discover connections belonging to another project. ## External users External users are individuals whose email domains are not part of the organization's workspace. **Invitation paths:** - A **Workspace Owner** can invite external users to the workspace via Workspace Settings. Once in the workspace, they can be assigned to projects. - A **Project Admin** can invite external users directly to a project via project user management. Invited users receive an email with an activation link. Until they accept, they exist only as a pending invitation record. Role and project assignments are stored with the invitation and applied upon acceptance. External users operate under the same role model (Workspace Member, Project Admin, Project Editor) as internal users. There are no special permissions or restrictions unique to external status beyond the invitation workflow. Pending invitations can be revoked before acceptance; active workspace access is removed by the Workspace Owner. ## Activity log The Activity Log records workspace and project actions such as invitations, removals, renames, and pipeline changes, each with a timestamp, the author, and the affected resource. Workspace Owners and Workspace Members can view it; project roles don't affect access. How far back it reaches depends on your plan. See [Audit logs](https://mammoth.io/docs/learn/security-overview/audit-logs/). ## Role assignment and removal **Adding users:**\ When inviting a new user, the Workspace Owner specifies the workspace role (Member) and can optionally assign them to one or more projects with a designated project role. **Changing roles:**\ Workspace role changes (Owner ↔ Member) and project role changes (Admin ↔ Editor) take effect immediately. There is no grace period or deferred propagation. **Removing users:**\ Removing a user from the workspace removes their workspace and project role assignments. The user's account is not deleted—if they belong to other workspaces, those memberships are unaffected. Project Admins can remove users from their project without affecting workspace membership. ## Best practices - **Workspace Owner access** should be limited to the individuals responsible for billing and workspace administration. A workspace can have more than one Owner, so keep the number small. - **Default to Project Editor** for new members. Elevate to Project Admin only when the user needs to manage project membership or Live Connections. - **Remove users promptly.** Removing a user from the workspace revokes all project access simultaneously. - **Scope API keys.** When issuing API keys for integrations or pipelines targeting a specific project, set the project scope on the key to prevent access to other projects in the workspace. - **Review access periodically.** Use Workspace Settings, then User Management, to audit who belongs to which projects and in what role. Cross-reference against current team structure. --- # Audit logs URL: https://mammoth.io/docs/learn/security-overview/audit-logs/ · Updated: 2026-11-02 Use the Mammoth Activity Log as an audit trail: what it records, how to filter by time, event, category, and author, and how to export it. The Activity Log is Mammoth's audit trail: a chronological record of actions taken in your workspace. It captures who did what, when, and on which resource. This page is for Workspace Owners and Members who review or export that record. ## Open the Activity Log 1. Click **Monitor** in the left sidebar 2. Select the **Activity Log** tab Workspace Owners and Workspace Members can view the Activity Log. Your project role does not affect access. For details on filtering and exporting, see [Activity Log](https://mammoth.io/docs/learn/monitor/activity-log/). ![Activity Log table with Date, Events, Details, Object, Category, and Author columns and an Export button](https://mammoth.io/docs/images/20260423_100519_activity-log-event-detail.webp) ## What is captured | Category | Events logged | | --- | --- | | **Dataset** | Create, rename, duplicate, delete, add data, combine, replace, delete batches, suspend and resume batches | | **View** | Create, rename, delete, rerun | | **Pipeline** | Add, edit, rename, delete, suspend, and restore tasks and actions | | **Automation** | Create, edit, rename, delete, update | | **Connector** | Create, edit, and delete connections | | **Project** | Create, rename, delete, property updates | | **Folder** | Create, rename, delete | | **Workspace** | Rename workspace, invite users, remove users, delete invites | | **Data Retention** | Create, edit, delete, and run retention policies; retention approval requests | Each log entry shows: - **Date**: when the action happened - **Events**: the action type (for example, *Create dataset* or *Edit automation*) - **Details**: a description including resource names - **Object**: the affected resource, with a link - **Category**: the resource type, color coded - **Author**: the workspace member who performed the action ## Time range The log defaults to **This month**. Use the date control to choose Today, Yesterday, Last 7 days, This week, Last week, This month, Last 3 months, Last 6 months, This quarter, Last quarter, Year to date, or a custom range. ## Filtering Use the column header controls to filter the log: | Filter | Options | | --- | --- | | **Events** | Filter by specific action type | | **Category** | Connector, Dataset, Folder, Automation, Pipeline, Project, View, Workspace | | **Author** | Filter to a specific team member | Filters can be combined, and they also apply when you export. ## Exporting audit logs Click **Export** (top right), choose a format, and click **Confirm**. **Expected result**: Mammoth exports the log with your active filters and date range applied. | Format | Use case | | --- | --- | | **CSV** | Spreadsheet review, bulk analysis, external audit tools | | **XLSX** | Excel-compatible reporting | | **Mammoth Dataset** | Load into a project to query and analyze with pipelines | > The export applies your active filters and date range. Clear all filters before exporting to get the full log for the selected period. ## Log retention How far back the Activity Log reaches depends on your plan: | Plan | Activity Log history | | --- | --- | | Free | 7 days | | Starter | 90 days | | Team | 1 year | | Pro | 3 years | Older activity isn't available on your plan. Mammoth shows a banner in the Activity Log when your plan limits the history. ## Access control auditing Filter **Events** to *Invite users to workspace*, *Remove user from workspace*, and *Delete invite* to review who was invited to or removed from the workspace. Each entry has a timestamp and the author of the change. ## Troubleshooting **Recent events are missing**\ : Check the date range. It defaults to **This month**. Widen the range for older activity. **Export is incomplete**\ : Active filters apply to the export. Reset all filters before exporting to get the complete log. **Older events are missing**\ : Your plan limits how far back the log reaches. See the retention table above. **The Activity Log tab is missing**\ : Only Workspace Owners and Workspace Members see it. Contact your Workspace Owner to check your role. --- # Sign-in and authentication URL: https://mammoth.io/docs/learn/security-overview/authentication/ · Updated: 2026-11-02 Sign-in methods for Mammoth: email and password, enterprise SSO, two-factor authentication, session security, and API tokens for integrations. This page is for users, IT administrators, and developers. It covers the four ways to authenticate: sign-in methods, 2FA, session security, and API tokens. Mammoth supports four authentication methods: email/password, enterprise SSO (SAML/OIDC), two-factor authentication (TOTP), and API tokens. Authentication is managed through Keycloak, an enterprise-grade identity provider. ## Authentication methods | Method | Use case | | --- | --- | | **Email / password** | Individual users and small teams | | **Enterprise SSO (SAML/OIDC)** | Organizations with an existing identity provider (plan feature) | | **Two-factor authentication (TOTP)** | Enhanced security on top of any primary method | | **API token** | Automated workflows, integrations, and service accounts | ## Email / password ### Password requirements Passwords must meet minimum security requirements: - At least 12 characters - At least one letter - At least one digit - At least one symbol (except `"` and `\`) ### Password reset 1. Click the forgot-password link on the sign-in page 2. Enter your email address 3. Open the temporary reset link in your email 4. Set a new password that meets the requirements above **Expected result**: You can sign in with the new password. ## Enterprise SSO (SAML/OIDC) Single sign-on with SAML or OIDC lets your organization use its existing identity provider to sign in to Mammoth. SSO is a plan feature; it is included on the Pro plan. Contact [support@mammoth.io](mailto:support@mammoth.io) or your account manager to set it up for your organization. ## Two-factor authentication (2FA) Mammoth supports TOTP (time-based one-time passwords) as a second factor. You need an authenticator app to sign in. > **Important:** Enabling 2FA is permanent and cannot be undone. Once enabled, two-factor authentication cannot be disabled on your account. ### Setting up 2FA 1. Open your account menu in the left sidebar and select **Profile Settings** 2. Under **Security**, find **Two-Factor Authentication** 3. Click **Enable 2FA** 4. On the **Enable Two-Factor Authentication** screen, click **Enable 2FA** again to confirm 5. Follow the prompts to register your authenticator app After setup, every sign-in requires both your password and a current one-time code. ### Workspace-wide 2FA enforcement Enforced MFA is a plan feature; it is included on the Pro plan. New users have a 2-day grace period from account creation before enforcement applies to them. ## API authentication Mammoth provides two token types for programmatic access: JWT tokens and API tokens. ### JWT tokens JWT tokens are issued on sign-in and used for user-scoped API access. They inherit the user's permissions and are validated on every request. - **Expiration:** 48 hours; renewed automatically while the session is active - **Use for:** user-driven API calls, scripts that authenticate as a user - **Anti-CSRF:** all state-changing requests require a matching anti-CSRF token **Using JWT tokens in requests:** ```http Authorization: Bearer ``` ### API tokens API tokens are long-lived credentials scoped to a workspace. They are designed for service accounts and integrations. A token can also be limited to a single project. ![The API tokens card in Workspace Settings, with the Generate key button and the list of keys](https://mammoth.io/docs/images/20261009_101001_APIKeysTokensCard.webp) **Creating an API token:** 1. Go to **Workspace Settings**, open **API Keys**, and find the **API tokens** card 2. Click **Generate key** 3. In the **Create API key** dialog, enter a name (for example, *ETL pipeline - production*). Turn on **Project scoped** and pick a project to limit the key to that project. 4. Click **Create key** 5. Click **Copy secret**, store it somewhere safe, then click **Done**. The token starts with `mm_` and is shown only once. **Expected result**: The new token is ready to use in the `Authorization` header. **Using an API token in requests:** ```http Authorization: Bearer mm_ ``` The token belongs to one workspace, so no workspace header is needed. The older `X-API-KEY` / `X-API-SECRET` headers are deprecated; new tokens have no secret. For the base URL, request examples, and the SDK and CLI login, see [API authentication](https://mammoth.io/docs/build/auth/) in the Build section. **Security best practices:** - Store tokens in a secrets manager (such as AWS Secrets Manager or HashiCorp Vault), never in source code - Use separate tokens for each environment (development, staging, production) - Rotate tokens quarterly or immediately if a compromise is suspected - Delete tokens that are no longer in use ## Session management - Sessions use cryptographically secure tokens generated with `secrets.token_urlsafe()` - Each session includes an anti-CSRF token validated on all state-changing operations - HTTP-only, Secure, and SameSite=None cookie flags prevent JavaScript access and enforce HTTPS - Sessions expire after 48 hours of inactivity and are renewed on each authenticated request - Sessions end when you sign out - The user's last sign-in date and last activity timestamp are tracked for security auditing --- # Compliance URL: https://mammoth.io/docs/learn/security-overview/compliance/ · Updated: 2026-11-02 Mammoth's SOC 2 Type II and ISO 27001 certifications, GDPR and HIPAA support, and how the Activity Log supports your own audit and reporting. Mammoth is SOC 2 Type II and ISO 27001 certified and supports GDPR and HIPAA compliance. This page is for security and compliance reviewers. It covers what is certified and how the Activity Log supports your own audit and reporting obligations. ## Certifications | Certification | Scope | | --- | --- | | **SOC 2 Type II** | Security controls attested by an independent audit | | **ISO 27001** | Information security management system | To request security documentation, contact your account manager or [support@mammoth.io](mailto:support@mammoth.io). ## GDPR Customer data is stored in AWS Ireland (EU). Your organization is the data controller and Mammoth is the data processor. Mammoth also handles GDPR deauthorization requests for third-party platform integrations (for example, Shopify) through webhooks when an end customer revokes consent. ## HIPAA Mammoth supports HIPAA compliance for healthcare customers. To discuss your requirements, contact your account manager or [support@mammoth.io](mailto:support@mammoth.io). ## Audit trail for compliance reporting The Activity Log records who did what and when across your workspace. See [Audit Logs](https://mammoth.io/docs/learn/security-overview/audit-logs/) for how to filter and export it. --- # Data security URL: https://mammoth.io/docs/learn/security-overview/data-security/ · Updated: 2026-11-02 How Mammoth encrypts connector credentials, protects browser sessions, where customer data is stored, and which network ports data sources must allow. This page is for IT administrators and security reviewers. It covers how Mammoth protects credentials and sessions, where your data is stored, and the network ports data sources must allow. ## Credentials Credentials you give Mammoth for connectors, such as database passwords and API secrets, are encrypted with RSA public-key encryption (PKCS1-OAEP). The private key is stored separately from the encrypted values. ## Sessions Browser sessions use HTTP-only, Secure cookies, so the session cookie is only sent over HTTPS and is not readable by JavaScript. See [Sign-in and authentication](https://mammoth.io/docs/learn/security-overview/authentication/) for session lifetime and CSRF protection. ## Data location By default, customer data is stored in AWS Ireland (EU). ## Network requirements For Mammoth to connect to your data sources, the source must be reachable from Mammoth on its standard port: | Traffic | Port | | --- | --- | | Mammoth services (HTTPS) | 443 | | PostgreSQL | 5432 | | MySQL | 3306 | | SQL Server | 1433 | If your database listens on a non-default port, allow that port instead. IP allowlisting and VPC deployment are available on the Enterprise plan. --- # Security and compliance overview URL: https://mammoth.io/docs/learn/security-overview/ · Updated: 2026-11-02 How Mammoth secures your data: sign-in methods, role-based access control, credential encryption, the Activity Log, data location, and compliance. This section is for security reviewers, IT administrators, and Workspace Owners. Start with [Sign-in and authentication](https://mammoth.io/docs/learn/security-overview/authentication/) for how users and integrations prove their identity, or [Compliance](https://mammoth.io/docs/learn/security-overview/compliance/) for certifications. Mammoth secures your data through identity management, role-based access control, encrypted credential storage, and an activity log. This page summarizes each area and links to the detail. ## In this section | Page | What it covers | | --- | --- | | [Sign-in and authentication](https://mammoth.io/docs/learn/security-overview/authentication/) | Email/password, SSO, TOTP-based 2FA, API tokens | | [Access control](https://mammoth.io/docs/learn/security-overview/access-control/) | Role-based hierarchy across Workspace and Project levels, with the complete roles and permissions matrix | | [Audit logs](https://mammoth.io/docs/learn/security-overview/audit-logs/) | Chronological record of workspace and project actions | | [Data security](https://mammoth.io/docs/learn/security-overview/data-security/) | Credential encryption and data location (AWS Ireland) | | [Compliance](https://mammoth.io/docs/learn/security-overview/compliance/) | SOC 2 Type II, ISO 27001, GDPR, and HIPAA | ## Security at a glance | Layer | Standard | | --- | --- | | Credential storage | RSA public-key encryption | | Authentication | Keycloak: SSO, TOTP 2FA, API tokens | | Access control | Role-based access control with Workspace and Project role tiers | | Data location | AWS (Ireland) | | Certifications and compliance | SOC 2 Type II, ISO 27001, GDPR, HIPAA | ## Request security documentation To request security documentation, contact your account manager or [support@mammoth.io](mailto:support@mammoth.io). --- # AI SQL Query URL: https://mammoth.io/docs/learn/transform/ai-sql-query/ · Updated: 2026-11-02 Use AI SQL Query in Mammoth to turn a plain-English request into a SQL query on your View, review or edit the SQL, and apply it as a pipeline task. AI SQL Query lets you query your dataset using plain English or hand-written SQL. Describe what you want—Mammoth generates valid SQL, tests it against your data, and applies it as a task in your transformation pipeline. ## How to open AI SQL Query 1. Open a View in the Data Editor. 2. Click the blue **+** button (tooltip "Add a task") in the action bar. 3. The Transform menu opens. The **AI Powered** category is selected by default. If you type your request in the **Describe your transformation** search box first, **AI SQL Query** always appears in the results and your text is carried into its prompt. 4. Click **AI SQL Query—Run AI-assisted SQL queries directly on your data**. The AI SQL Query panel opens at the bottom of the View. ![Transform menu open on AI Powered, listing AI SQL Query, Generative AI, Extract Text, Bulk Replace and Conditional Filter](https://mammoth.io/docs/images/20260605_092517_transformation-menu1.webp) ## The AI SQL Query panel ![AI SQL Query panel with an empty prompt box, a disabled Generate SQL button and an empty SQL editor](https://mammoth.io/docs/images/20260605_092555_ai-sql-query-panel1.webp) | Element | Description | | --- | --- | | **Intent textarea** | Free-text field—describe what you want to query in plain English | | **Generate SQL** | Triggers AI generation; active once you type an intent | | **Status bar** | Bar showing live generation progress (appears during generation) | | **AI SQL Query editor** | SQL editor with syntax highlighting | | **Insert Snippet** | Opens a panel to insert reusable SQL snippets | | **Cancel** | Closes the panel without applying any changes | | **Apply** | Applies the SQL as a new transformation task in the pipeline | | **Apply dropdown** | Expands to reveal **Add to Pipeline** as an alternative apply action | ## Generating SQL from plain English 1. In the intent textarea, type a description of what you want. 2. Click **Generate SQL** (or press Enter). 3. Watch the status bar—it shows each phase of the generation process in real time. 4. When complete, the generated SQL appears in the code editor. 5. Review the SQL, then click **Apply**. ![AI SQL Query panel with the prompt 'Show total sales amount grouped by transaction type' and Generate SQL enabled](https://mammoth.io/docs/images/20260605_092707_intent-filled1.webp) **Example intents:** - "Show total sales amount grouped by transaction type" - "Find the top 10 customers by order count" - "Show all rows where the register is Online Orders and the transaction type is sale" - "Count unique cashiers per register" ## What happens during generation When you click Generate SQL, Mammoth runs a multi-step process behind the scenes. The status bar shows progress messages such as the following (the exact messages vary with your request, and extra messages appear if a query needs correcting): ![AI SQL Query panel while generating, with a Generating button and a Validating request size message](https://mammoth.io/docs/images/20260605_092746_sql-generating1.webp) | Phase | Status message | | --- | --- | | 1\. Start | Starting SQL generation process... | | 2\. Metadata | Preparing data and metadata... | | 3\. Column selection | Identifying relevant columns for your request... | | 4\. Token validation | Validating request size... | | 5\. Sample values | Fetching sample values for selected columns... | | 6\. Context | Preparing query context with your data... | | 7\. Understanding | Understanding your data and request... | | 8\. Writing | Writing SQL query to match your request... | | 9\. Testing | Testing query correctness... | | 10\. Validation | Query generated successfully, verifying if results match intent... | Once generation finishes, the SQL populates the editor and the **Apply** button becomes active. If the query could not be confirmed to match your request, a warning tells you to review and test it before applying. ## Reviewing and editing generated SQL Mammoth generates SQL that references your View's name and column names exactly as they appear in your dataset. Column names and the View name are double-quoted to handle spaces and special characters. ![AI SQL Query panel showing the generated SELECT statement grouped by Transaction Type and an enabled Apply button](https://mammoth.io/docs/images/20260605_092843_sql-generated1.webp) **Example output:** ```sql SELECT "Transaction Type", CAST(SUM("Total") AS NUMERIC) AS total_sales_amount FROM "View 1" GROUP BY "Transaction Type" ``` You can edit the SQL directly in the code editor before applying. You do not have to use AI generation—you can type or paste SQL directly into the editor and apply it without generating anything. ## Writing SQL directly (without AI) You can skip AI generation entirely and write SQL by hand: 1. Open the AI SQL Query panel. 2. Leave the intent field blank. 3. Type your SQL directly in the **AI SQL Query** code editor. 4. Click **Apply**. This is useful when you already know the exact query you want to run, or when you want to adapt a query from another tool. **SQL dialect:** AI-generated queries are written in DuckDB SQL. Column names with spaces or special characters must be double-quoted. The View name is the table name. ## Using SQL snippets Snippets let you save reusable SQL fragments and insert them into any query. They are useful for standard calculations, filters, or expressions that your team uses repeatedly. Click **Insert Snippet** to open the snippets panel. ![Insert Snippet menu open in the AI SQL Query panel, showing No snippets available and a New Snippet link](https://mammoth.io/docs/images/20260605_092951_insert-snippet-panel1.webp) ### Creating a snippet 1. Click **New Snippet** in the snippets panel. 2. Give the snippet a name and enter the SQL fragment in the value field. A snippet name must start with a letter or underscore and contain only letters, digits, and underscores. A description is optional. 3. Click **Create Snippet**. Snippets cannot reference other snippets. ### Using a snippet in a query In the snippets panel, choose how to insert a snippet: - **Reference**—inserts the token `{{snippet_name}}`. The reference stays linked: Mammoth resolves it to the snippet's current content when the query runs. - **Paste value**—drops the snippet's raw text into the query. The text is frozen and has no link back to the snippet. ### Stale snippets If a snippet referenced by a saved query task is updated, Mammoth marks that task as stale. Rerun the affected pipeline to apply the updated snippet content. --- ## Applying the query The **Apply** button adds the SQL query as a new transformation task in the pipeline. It has two modes: | Option | What it does | | --- | --- | | **Apply** | Adds the task to the pipeline and executes immediately | | **Add to Pipeline** (dropdown) | Adds the task to the pipeline without running it; it runs when you apply the pending pipeline changes | After applying, the SQL Query task appears as a card in the pipeline panel on the left. You can reorder, edit, duplicate, suspend, or restore it like any other pipeline task. --- ## Error states If the AI cannot produce a query that passes validation after multiple attempts, it shows an error message: > Query validation failed after N attempts: Query doesn't match intent | Error message | What it means | | --- | --- | | Query validation failed after N attempts | The AI generated SQL but could not confirm the results matched your intent after 6 attempts in total (the first query plus up to 5 corrections) | | Failed to generate SQL query | The AI service request failed | | No SQL query was generated | The AI returned an empty response | | An error occurred while processing your SQL query | Unexpected processing error | When generation fails, the SQL editor may contain the last attempted query. You can edit it manually and apply it directly, or rephrase your intent and try again. **Tips for better results:** - Be specific about column names (e.g., "Transaction Type column" rather than "type") - Mention aggregations explicitly ("total", "count", "average") - If a column for your concept doesn't exist, describe the calculation (e.g., "revenue as quantity times price") ## Tips and best practices **Be descriptive with intent.** The more specific your description, the more accurate the SQL. Instead of "show sales by region", try "show total quantity sold grouped by region, sorted highest to lowest". **Review before applying.** Always check the generated SQL before clicking Apply. Confirm that column references match your actual column names and the logic reflects your intent. **Use snippets for team standards.** Save common calculations or filter conditions as snippets so everyone on the team uses consistent logic. **Edit freely.** Generated SQL is a starting point. Edit it in the code editor as needed—there is no lock on AI-generated output. **Pipeline position matters.** The task's position in the pipeline determines which state of the data is queried. If you insert an AI SQL Query task after a filter task, it queries the already-filtered data, not the original source. --- # Column Management URL: https://mammoth.io/docs/learn/transform/column-management/ · Updated: 2026-11-02 Reference for the Column Management functions in Mammoth: add, copy, combine, convert, remove and split columns, with settings for each. The Column Management category has functions for adding, copying, combining, converting, and removing columns. These are pipeline tasks—they modify your dataset structure and re-run every time the pipeline refreshes. To open the function list, click the **"Describe your transformation"** bar (or a **+** button in the Pipeline panel) and select **Column Management**. > **Renaming columns:** There is no Rename Column function in this category. To rename a column, open its 3-dot menu in the data grid and select **Rename Column**. This is a display-level change and does not create a pipeline task. ## Add Column Add Column adds one or more empty columns to your View. Each column gets a name and a type at creation—you populate the values using other pipeline tasks such as Label & Insert Values or Math Function. ![Add Column panel open, showing three rows each with a column title](https://mammoth.io/docs/images/20260417_124429_AddColumnpanelopenshowingthreerowseachwithacolumntitle1.webp) **How to configure:** - **Define new column title**—enter a name for the column. - **Choose new column type**—select **Text**, **Number**, or **Date**. - **Add more**—click **Add more** to add additional columns in the same task. Each row is independent—different names and types can be set per column. - To remove a column from the list before applying, click the trash icon on that row. ## Copy Columns Copy Columns creates a duplicate of one or more columns. It appears in the function list only when the feature is enabled for your workspace. Useful for preserving originals before applying transformations, or for creating a version of a column in a different type or format. ![Copy Columns panel with brand, customer_age and sales_rep selected and new names such as Copy of brand](https://mammoth.io/docs/images/20260511_175508_Screenshot2026-04-27110616.webp) **How to configure:** - **Select columns to duplicate**—click **+** next to any column in the left panel to add it to the copy list. A search box appears when the list is long. - **Copied columns**—each added column appears on the right as a source → destination mapping. The default name is "Copy of [column name]"—edit it directly in the name field. - To remove a column from the copy list, click the X on that row. To configure how each copy is written, hover over a row and click its edit icon to open the output options: - **Place in**—choose **New Column** to write the copy to a new column, or **Existing Column** to overwrite an existing column. - **Type**—choose the output type for the copy. The options available depend on the source column type: - Text columns: **T** (Text) only - Number columns: **T** (Text) or **#** (Number), with format controls (%, $, decimal places) - Date columns: **T** (Text) or the date icon, with a **Date Format** dropdown to control how the date displays in the copy The other icons that appear on hover are: - **Filter icon**—adds a condition to restrict the copy to rows matching a filter - **X icon**—removes that column from the copy list ## Combine Columns & Text Combine Columns & Text merges values from multiple columns—and optionally static text—into a single new column. You can mix columns and fixed text values in any order to control exactly how the combined output reads. ![Combine Columns & Text panel combining store_name, a separator and location into a new column named Store_label](https://mammoth.io/docs/images/20260511_175545_combine_column1.webp) **How to configure:** - **Define values or columns to combine**—click in the input field and start typing. Column names from your dataset appear as suggestions with their type icons—select one to add it as a column chip. To add a fixed text value (for example, a separator like " - " or a prefix like "ID:"), type the text and select **Add... "[your value]"** from the autocomplete. It is added as a text chip. Mix columns and text in any order to build the combined output. - To remove any item, click the X on its chip. Click **Clear** to remove everything. - **Add Condition**—optionally restrict the combination to rows that meet a condition. Clicking this opens a modal where you can describe the condition in plain language and click **Generate**, or build it manually using the **Where** column and operator dropdowns. Click **Apply Condition** when done. - **Place in**—choose **New Column** and enter a name, or choose **Existing Column**. **Example:** To create a display label like "Chic Boutique - Miami" from a `store_name` and `location` column, add the `store_name` chip, type " - " and select Add to insert it as a text chip, then add the `location` chip. Name the output `store_label`. ## Convert Column Type Convert Column Type changes how a column's values are displayed—as text, numbers, or dates. You can convert multiple columns in a single task, with each row configured independently. ![Convert Column Type panel with three conversion rows for customer_age, brand and a date column, and a data-loss note](https://mammoth.io/docs/images/20260417_124716_ConvertColumnTypepanelopenshowingthreeconversionrows_customer_age1.webp) **How to configure:** - **Select columns to convert**—choose the source column from the dropdown. Each row handles one column conversion. - **Select new column type**—choose the target type. The options shown depend on the source column type: - Number column: **Date** or **Text** - Text column: **Date** or **Number** - Date column: **Number** or **Text** - **Format Output**—appears when converting to Date or from Date to Text. When converting to Number, number format controls appear instead. For dates, configure two settings: - **Convention**—choose **Universal**, **UK**, **US**, or **Custom** to set the date convention for the output. - **Format string**—choose a format from the dropdown (for example YYYY/MM/DD, YYYY/MM/DD HH24:MI:SS, YYYY/MM/DD HH:MI:SS am, YYYY-MM-DD) or select **Custom** and type your own format string. - **Define Source Format**—when converting Text to Date, click the gear icon next to the format string to tell Mammoth what format the date data is already in before conversion. Options are: - **Source - Auto**—Mammoth detects the format automatically - **Source - DD/MM/YYYY (Day First)** - **Source - MM/DD/YYYY (Month First)** - **Source - Custom (multiple formats)**—enter semicolon-separated format strings to handle columns where dates appear in more than one format - **Convert more columns**—click **+ Convert more columns** to add another conversion row to the same task. - To remove a conversion row, click the trash icon on that row. > If a value cannot be converted to the target type—for example, "John Doe" being converted to Number or Date—it will be given a null (blank) value. **Example:** An `order_date` column imported as Text contains values in "YYYY/MM/DD" format. Select the column, choose Date as the target type, set Source Format to Source - Auto, and set Format Output to YYYY/MM/DD. The column is now a proper Date type and can be used in date filters and calculations. ## Remove Column Remove Column removes one or more columns from your View. ![Remove Column panel open, showing a searchable column checklist](https://mammoth.io/docs/images/20260417_124811_RemoveColumnpanelopenshowingasearchablecolumnchecklist1.webp) **How to configure:** - **Select column(s) to remove**—check one or more columns from the list. Columns appear with their type icons (T for text, # for number, clock for date). Use the search box to find columns quickly. - Selected columns appear as chips in the **Columns to be removed** area on the right. Click the X on a chip to deselect it, or click **Clear** to deselect all. > Removing a column is a pipeline task. To restore a removed column, suspend or delete the Remove Column task in the Pipeline panel. ## Split Into Multiple Columns Split Into Multiple Columns divides the contents of a single text column into multiple new columns based on a delimiter character. Mammoth creates the specified number of columns, each containing one part of the split value. ![Split Into Multiple Columns panel open, showing Source column dropdown](https://mammoth.io/docs/images/20260417_124853_SplitIntoMultipleColumnspanelopenshowingSourcecolumndropdown1.webp) **How to configure:** - **Source column**—choose the text column to split. - **Delimiter**—enter the character to split on, for example a comma, space, hyphen, or pipe. The info icon next to the label shows a contextual example—for instance, for values like "UK, USA, France" a comma delimiter splits the value into 3 columns. - **No. of Columns**—enter the number of output columns to create. The value must be between 2 and 50. **Example:** A `name` column contains values like "Lightweight Box Model-3887 #39". Set the delimiter to `-` and No. of Columns to 2. Mammoth creates two new columns—the first containing "Product Name" and the second containing " Model number". --- # Column menu URL: https://mammoth.io/docs/learn/transform/column-menu/ · Updated: 2026-11-02 Reference for the Mammoth Column Menu: format, sort, freeze, rename, hide or remove a column, and which actions are Display Changes or pipeline tasks. The **Column Menu** is a dropdown attached to each column header in the data grid. It gives you formatting options, sorting, visibility controls, and shortcuts to transformation functions without leaving the grid. Some actions are Display Changes that only affect how the View looks; others add a task to the pipeline. Click the **3-dot menu button** in any column header to open it. The menu closes after you select an action, but you can reopen it immediately to perform another operation on the same column. ## Which changes stay local to this View The table shows whether each action is a Display Change or a pipeline task, and what other Views see. | Change | Scope | Who else sees it? | | --- | --- | --- | | **Format a number or date column** (currency, percentage, decimals, date format) | Display Change (this View) | Other Views keep their original formatting | | **Format a text column** (change case, normalize whitespace) | Pipeline task (this View) | Adds a Text Formatting task to this View's pipeline | | **Sort ascending / descending** | Display Change (this View) | Saved with the View and listed under Grid Changes in Display Changes | | **Hide column** | Display Change (this View) | Other Views still display the column | | **Rename column** (display alias) | Display Change (this View) | Other Views still use the original column name | | **Freeze column** | Personal setting (this View) | Saved for you in this View; it does not change the View for others | | **Duplicate column values** | Pipeline task (this View) | Adds a Copy Columns task to this View's pipeline | | **Apply Filter with this Column** | Pipeline task (this View) | Adds a Conditional Filter task to this View's pipeline | | **Remove Column** | Pipeline task (this View) | Adds a Remove Column task to this View's pipeline; suspend or delete that task to bring the column back | Display Changes (formatting, sort, hide, rename) only change how this View looks. Operations that open the Functions Panel (like splitting, combining, or removing columns) add tasks to this View's pipeline. ## Menu structure The Column Menu has five zones, top to bottom: 1. **Format section**—appears at the top; layout varies by column type (see below) 2. **Sort**—a dropdown to sort the column ascending or descending 3. **Conditional Highlights**—opens the Conditional Highlights panel for this column 4. **Display checkboxes**—Show Whitespaces (TEXT columns only) and Freeze column (all types) 5. **Action list**—type-specific operations followed by common operations For a TEXT column whose values look like JSON, the menu opens with an **Extract JSON** shortcut at the top and tucks everything else under **More options**. ## Format columns by type Number and date formatting change how data appears in the grid—they do not change the underlying data. Text formatting is different: it adds a Text Formatting task to the pipeline. The Format section at the top of the menu behaves differently depending on the column type. ### Format a TEXT column For TEXT columns, "**Format**" appears as an expandable submenu with a right-facing arrow. Hover over or click it to open the text formatter flyout. Inside the formatter: **Change text case**—Make all text uppercase, lowercase, or capitalized: 1. Check the box next to "Change case to" 2. Select from the dropdown: **UPPER**, **lower**, or **Capitalized** 3. Click **Apply** **Normalize whitespace**—Remove extra spaces and tabs: 1. Check "Normalize whitespace" 2. Click **Apply** This applies the Text Formatting function's whitespace option to the column. Useful for cleaning up messy text. **More options**—Opens the Text Formatting panel with your selections pre-filled so you can adjust them before applying. The **Apply** button stays disabled until at least one option is checked. Clicking **Apply** adds a Text Formatting task to the pipeline and changes the column's values. **Show Whitespaces**—Visualize spaces and special characters in the column: This is a checkbox directly in the main menu body (not inside the Format submenu), visible only for TEXT columns. 1. Check "Show Whitespaces" 2. Whitespace characters are now displayed as visible symbols throughout the column Uncheck to hide them. Helpful when debugging data quality issues where leading spaces or tabs affect analysis. ### Format a NUMERIC column For NUMERIC columns, the formatter appears **inline** within the main menu—there is no submenu to expand. The formatter is headed **Formatting** and has a row of icon buttons (they have no text labels): **Separator**—Toggle thousand separators (1,234,567 vs 1234567): Click the separator button to toggle. It is **on by default**. **Percentage**—Display numbers as percentages (0.45 → 45%): Click the percentage button to toggle. Note: currency and percentage are mutually exclusive. Enabling one disables the other. **Currency**—Add a currency symbol: Click the currency button to open the currency picker. Select one of: - **$** (USD) - **€** (EUR) - **¥** (YEN) - **£** (GBP) - **₹** (INR) Click the symbol to select it. Note: currency and percentage are mutually exclusive. **Decimal precision**—Adjust visible decimal places (up to 5): Use the left/right chevron buttons next to the decimal preview to step the precision. The default is **2 decimal places**. **Apply**—Confirms formatting changes. The button is enabled only when the current settings differ from the saved format. **Reset**—Reverts all numeric formatting back to defaults (separator on, no currency, no percentage, 2 decimals). The **Reset** button (tooltip: Reset to original formatting) appears only when the column's format differs from the default. --- ### Format a DATE column For DATE columns, "**Format**" appears as an expandable submenu. Inside the formatter: 1. Select the date type from the dropdown: **Universal**, **US**, or **UK** 2. A list of format options appears for your chosen type, each showing today's date as a live preview 3. Click any format to apply it immediately ## Sort your data Below the format section, the menu shows a **Sort** dropdown. **Sort ascending or descending**—Organize rows by a column's values: 1. Click the 3-dot menu on any column 2. Select "Ascending" or "Descending" from the Sort dropdown 3. The grid reorganizes immediately The Column Menu sorts by one column at a time; choosing a sort in a different column replaces the previous one. To sort by several columns, use the **Sort by** button in the footer of the View, which opens the Sort Columns dialog with **Add another sort**. Sorting is a Display Change on this View, not a pipeline task. It is saved with the View and shows under **Grid Changes** in the Display Changes modal, where you can revert it. There is no dedicated Sort pipeline task in Mammoth—if you need a specific row order for a calculation, use the **Add Sort** option available inside functions like Fill Missing Values or Window Function, which is saved as part of that task. ## Freeze a column The **Freeze "[column name]"** checkbox appears in the main menu body for all column types, below the sort control. **Keep a column visible while scrolling horizontally:** 1. Click the 3-dot menu 2. Check **Freeze "[ColName]"** 3. The column is now pinned to the left side of the grid When you scroll right to see more columns, the frozen column stays visible. Useful for reference columns like "ID" or "Name." **Unfreeze**—Uncheck the freeze option to return the column to normal scrolling behavior. The freeze setting is saved for you per View—the column stays pinned after you refresh. ## Type-specific operations Below the checkboxes, the action list shows operations specific to the column's data type, followed by common operations available on all columns. ### TEXT column operations | Operation | What it does | | --- | --- | | **Label & Insert Values** | Set all cells in the column to a fixed value or expression | | **Split this column** | Break the column into multiple columns using a delimiter or pattern | | **Bulk Replace** | Find and replace multiple patterns simultaneously across the column | | **Extract Text** | Pull out a substring based on position or regex pattern | | **Combine with another column** | Merge this column with another using an optional separator | ### NUMERIC column operations | Operation | What it does | | --- | --- | | **Label & Insert Values** | Set all cells in the column to a fixed value or expression | | **Math Function** | Apply math formulas to the column | | **Calculate running total** | Compute a cumulative sum across rows in order | | **Ranking** | Assign rank values based on numeric order | **Note on running total:** Row order matters for a cumulative sum. ### DATE column operations | Operation | What it does | | --- | --- | | **Label & Insert Values** | Set all cells in the column to a fixed value or expression | | **Extract Date Part** | Pull out a specific component (year, month, day, quarter, etc.) | | **Add / Subtract Date Values** | Add or subtract days, months, or years from the date | When you select any of these, the Functions Panel opens with your column pre-selected. Configure the operation and click Apply to add it to your pipeline. ## Common operations (all column types) After the type-specific items, a divider separates the following operations available on every column: | Operation | What it does | | --- | --- | | **Apply Filter with this Column** | Opens the Functions Panel with a filter pre-configured for this column | | **Duplicate column values** | Opens the Copy Columns panel to add a copy of the column | | **Convert Column Type** | Changes the data type (TEXT → NUMERIC → DATE) | | **Add New Column to the right** | Inserts a blank column after the current column | | **Rename Column** | Opens an inline input to set a display alias for this View | | **Revert to original column name** | Removes the display alias (appears only if the column has been renamed) | | **Hide Column** | Removes the column from the current View without deleting data | | **Remove Column** | Opens the Remove Column panel; applying adds a task that removes the column from this View | ## Rename a column **Create a display name without changing the dataset:** 1. Click the 3-dot menu 2. Click **Rename Column** 3. An inline input field appears with the current name 4. Type your new display name and press Enter The column shows your new name in this View only. Other Views still use the original name. **Revert to original name**—The **Revert to original column name** option appears in the menu only after the column has been renamed. Click it to remove the display alias and restore the original column name. Note: the Rename option is disabled while the transformation info panel is open, or while any pipeline task is in error. Close the panel or fix the failing task first. ## Hide a column **Remove a column from view without deleting it:** 1. Click the 3-dot menu 2. Click **Hide Column** 3. The column disappears from the grid The data is still there—just not visible in this View. Other Views are unaffected. To unhide: use the Column Browser (the column count at the bottom of the View) or open **Display Changes** and revert the hidden column. ## Remove a column **Remove a column from the View:** 1. Click the 3-dot menu 2. Click **Remove Column** 3. The Remove Column panel opens with the column selected; click **Apply** Removal is a pipeline task, so it affects this View only. To bring the column back, suspend or delete the Remove Column task in the Pipeline panel. If you only want to hide a column from the grid, use **Hide Column** instead. ## When the menu is disabled The 3-dot menu button is disabled and cannot be opened when: - The pipeline is currently processing - Changes are being applied to the dataset - Draft mode is on and Mammoth is tracking pending tasks Wait for the pipeline to finish processing and the button becomes active again. While any pipeline task is in error (and is not suspended or deleted), the menu still opens, but **Rename Column**, **Hide Column** and **Revert to original column name** are disabled, and formatting and sort changes are ignored. Fix or remove the failing task to use them again. ## Common questions **Q: Will my formatting changes affect other people working with this dataset?**\ A: Number and date formatting are Display Changes on this View only; other Views keep their original formatting. Text formatting adds a pipeline task to this View, so everyone using this View sees the result. **Q: I sorted my column, but the sort disappeared when I refreshed. Why?**\ A: Sorting in the Column Menu is saved with the View as a Display Change, so it should persist after a refresh. If it does not, check the Grid Changes section of the Display Changes modal. There is no dedicated Sort pipeline task in Mammoth. Some functions (like Fill Missing Values and Window Function) let you define an **Add Sort** order that is saved as part of that specific task. **Q: What's the difference between renaming a column here and renaming it in the Column Browser?**\ A: They're the same thing—both create a View-specific display alias. The Column Menu rename is just a quicker way to do it without opening the full Column Browser panel. **Q: Why is the Rename option disabled?**\ A: The Rename option is disabled while the transformation info panel is open or while any pipeline task is in error. Close the panel, or fix or remove the failing task. **Q: I removed a column by accident. Can I get it back?**\ A: Yes. Remove Column is a pipeline task. Suspend or delete the task in the Pipeline panel to bring the column back. **Q: Can I use both a currency symbol and percentage at the same time?**\ A: No—currency and percentage are mutually exclusive. Enabling one automatically disables the other. **Q: How many columns can I freeze?**\ A: You can freeze more than one column. Freezing many columns leaves less horizontal space for scrolling through the rest of your data. --- ## Troubleshooting | Symptom | Reason | Solution | | --- | --- | --- | | 3-dot button is disabled | Pipeline is processing, applying changes, or Draft mode is on with pending tasks | Wait for the pipeline to finish | | Rename option is disabled | Transformation info panel is open, or a pipeline task is in error | Close the transformation info panel, or fix or remove the failing task | | Hide Column or Revert to original column name is disabled | A pipeline task is in error | Fix or remove the failing task | | Sort or other Display Changes are rejected | The pipeline has a task in error | Fix or remove the failing task, then try again | | Format didn't apply | Apply was not clicked | Reopen the menu and click Apply to confirm | --- ## See also - [**Column Browser**](https://mammoth.io/docs/learn/explore-discover/column-browser/)—Manage all columns at once (hide/show, reorder, bulk operations) - [**Grid Operations**](https://mammoth.io/docs/learn/transform/grid-operations/)—Select multiple columns to bulk hide, show, or remove - [**Transform and pipeline**](https://mammoth.io/docs/learn/transform/)—How pipeline tasks transform data - [**Date, Numeric & Text**](https://mammoth.io/docs/learn/transform/date-numeric-text/)—Functions for DATE, NUMERIC and TEXT columns --- # Conditional highlights URL: https://mammoth.io/docs/learn/transform/conditional-highlights/ · Updated: 2026-11-02 Use Conditional Highlights in Mammoth to color cells or rows with Condition Rules and Color Scales, manage rule order, and preview matches with focus mode. **Conditional Highlights** lets you apply color-based formatting rules to rows or cells in a View. Rules are evaluated in real time as you interact with the grid, and they don't add a pipeline task. Use them to flag outliers, track KPIs, compare performance against thresholds, or make any pattern in your data visible at a glance. ![View with a data grid and Highlights and Metrics tabs on the right edge](https://mammoth.io/docs/images/20260605_053445_dataview-overview1.webp) There are two rule types: | Rule type | What it does | Best for | | --- | --- | --- | | **Condition Rule** | Applies a solid color to rows or cells that match a logical condition | Flagging specific values, thresholds, categories | | **Color Scale** | Applies a gradient across a numeric or date column based on its value range | Visualizing performance distributions, rankings | Rules are saved to the View and are visible to everyone who accesses it. They are not personal or session-scoped. ## Open the Conditional Highlights panel The panel opens beside the data grid. Two ways to open it: - **Action bar:** Click the brush icon (tooltip **Conditional Highlights**) in the action bar at the top of the View. The **Highlights** tab on the right edge of the View also opens it. - **Column menu:** Open a column's 3-dot menu and select **Conditional Highlights**. This also pre-selects that column in the rule builder. ![Conditional Highlights panel empty state reading No highlights yet, with a New conditional highlight button](https://mammoth.io/docs/images/20260605_053416_panel-empty-state1.webp) ## Create a Condition Rule A Condition Rule applies a solid color when a row matches a logical condition you define. To create a Condition Rule: 1. Click **New conditional highlight** in the panel. 2. The rule builder opens on the **Rules** tab. 3. Build your condition: select a column, choose an operator, and enter a value. 4. Choose what gets highlighted: **Cells** or **Entire row**. 5. Select a color swatch. 6. Click **Save highlight**. ![New conditional highlight form with Rules and Color Scale tabs and empty column and operator pickers](https://mammoth.io/docs/images/20260605_053553_rule-builder-new1.webp) ### Build the condition Each condition has at least one row: a **column**, an **operator**, and a **value**. ![Column dropdown open in the New conditional highlight form, listing brand, category, color, customer_age and customer_gender](https://mammoth.io/docs/images/20260605_054853_column-dropdown-open1.webp) You can combine multiple conditions using **And** (all conditions must match) or the **Or** operator (any condition can match). Click **Condition** to append another condition. Click **Group** to create nested groups—for example, `(Region = "West" OR Region = "East") AND Sales > 5,000`. The condition builder is the same one used by Conditional Filter, so the same operators are available for Text, Number, and Date columns. For the full operator tables, see [Conditional Filter in Filter, Label & Replace](https://mammoth.io/docs/learn/transform/filter-label-replace/#conditional-filter). The AI generation bar is not available in the highlight builder. ![New conditional highlight form with the rule brand is BasicWear, Case sensitive, Apply to options and a Style color grid](https://mammoth.io/docs/images/20260605_055143_builder-full-view1.webp) > **Live preview:** While the builder is open, the grid reflects your in-progress rule in real time—but only when the condition is valid and a color has been selected. An incomplete rule does not flash on the grid. ### Choose what to highlight: Cells or entire row The **Apply to** selector in the builder controls the scope of the color: | Setting | What gets colored | | --- | --- | | **Cells** (default) | Only the cells in the columns you select | | **Entire row** | Every cell in the matching row receives the color | When **Cells** is chosen, the builder pre-selects the first column referenced in your condition. Use the column picker below the selector to add or remove columns from the highlight—this is independent of the condition columns. You can highlight a different set of columns than the ones the condition tests against. ### Pick a color Choose from 18 preset swatches. Colors are divided into two groups: - **Background colors (8):** apply a background fill to matching cells. - **Text-only colors (10):** change only the font color; no background fill is applied. ![Highlight form with a red style selected; rows containing BasicWear are highlighted red in the grid](https://mammoth.io/docs/images/20260605_055312_builder-color-selected1.webp) ### Rule titles Rules are not named. Each rule card shows an auto-generated summary of the condition (for example, *brand is 'BasicWear'*). If you close the builder without saving, any in-progress rule is discarded. A confirmation prompt appears if you have made changes. ## Create a Color Scale A Color Scale applies a gradient to cells in a numeric or date column, blending the color smoothly across the column's value range. > **Availability:** The Color Scale tab may not be visible in your workspace. If you do not see it, contact your workspace admin. To create a Color Scale: 1. Click **New conditional highlight** in the panel. 2. In the rule builder, click the **Color Scale** tab. 3. Select a **column**—only visible Numeric and Date columns appear in the dropdown. 4. Choose a **scale preset**. 5. For 3-stop scales, optionally set a **Colors change at** value to shift the midpoint. 6. Optionally, enter custom **Min** and **Max** values to override the auto-detected range. 7. Click **Save highlight**. ![Color Scale tab with customer_age selected and six preset color scales, plus optional Min and Max fields](https://mammoth.io/docs/images/20260605_060634_color-scale-builder-full1.webp) ### Scale presets | Preset | Colors | Stops | Colors change at | | --- | --- | --- | --- | | Red → Yellow → Green | Low = red, mid = yellow, high = green | 3 | Yes | | Green → Yellow → Red | Low = green, mid = yellow, high = red | 3 | Yes | | Red → White → Green | Low = red, mid = white, high = green | 3 | Yes | | White → Blue | Low = white, high = blue | 2 | No | | White → Red | Low = white, high = red | 2 | No | | White → Green | Low = white, high = green | 2 | No | ### Colors change at For 3-stop presets (Red → Yellow → Green, Green → Yellow → Red, Red → White → Green), the **Colors change at** field controls where the middle color sits on the gradient. For Numeric columns it accepts a number; for Date columns it shows a date picker. Leave it blank to split the gradient evenly across the range. ### Custom range By default, Color Scale auto-detects the column's minimum and maximum values from the data. The placeholder in the Min/Max fields shows the auto-detected values. Enter custom values to pin the scale to a fixed range—useful when you want consistent coloring across Views or over time, regardless of the current data distribution. ## Manage your rules ### Rule cards Each rule appears as a card in the panel. The card shows: - **Color swatch**—a solid color square for Condition Rules; a gradient bar for Color Scales. - **Title**—the rule's name, or an auto-generated condition summary. - **Subtitle**—the number of highlighted columns for Condition Rules (e.g., *2 columns*), *Entire row*, or the preset name for Color Scales (e.g., *Red → Yellow → Green*). - **Drag handle**—reorder the rule (hidden when there is only one rule). - **Warning icon**—appears when a column referenced by the rule no longer exists in the View or has changed type. See [Troubleshooting](#troubleshooting-reference-errors) below. - **Toggle**—enable or disable the rule without deleting it. Disabled rules appear dimmed. - **Edit**—opens the rule builder pre-populated with the rule's current settings. - **Delete**—opens a confirmation modal before removing the rule. ![Conditional Highlights panel listing one rule, brand is 'BasicWear', with edit, delete and on/off controls](https://mammoth.io/docs/images/20260605_061448_panel-with-rule-card1.webp) ### Enabling and disabling rules Use the toggle on any rule card to turn a rule on or off. Disabled rules remain saved but have no visual effect on the grid. This is useful for temporarily pausing a rule without losing its configuration. ### Reordering rules Drag rule cards by their handle to change their order. Order matters—see [How rules are evaluated](#how-rules-are-evaluated) below. The new order is saved automatically. ### Editing a rule Click **Edit** on any rule card to reopen the builder with the rule's current values. Changes take effect after you click **Save highlight**. To abandon edits, close the builder—a confirmation prompt appears if you have made unsaved changes. ### Deleting a rule Click **Delete** on a rule card, then confirm in the modal. Deletion is permanent—there is no undo. ## How rules are evaluated Rules are evaluated in the order they appear in the panel (top = highest priority). For each row: 1. Rules are checked from top to bottom. 2. **First match wins**—for each cell, the first rule (from the top) that matches the row and applies to that cell colors it, and no further rules are checked for that cell. A rule in **Cells** mode only colors the columns you chose, so lower rules can still color the other cells in the same row. 3. If no rule matches, no highlight is applied. ```plaintext Rules (top to bottom): 1. Sales > 10,000 → Red background 2. Sales > 5,000 → Yellow background 3. Region = "West" → Blue background ``` `Row: Sales = 12,000, Region = "West"`\ `→ Rule 1 matches → Red applied`\ `→ Rules 2 and 3 are skipped (first match wins)` `Row: Sales = 7,500, Region = "North"`\ `→ Rule 1: no match`\ `→ Rule 2: matches → Yellow applied`\ `→ Rule 3 is skipped` `Row: Sales = 2,000, Region = "West"`\ `→ Rule 1: no match`\ `→ Rule 2: no match`\ `→ Rule 3: matches → Blue applied` This means **rule order controls which rule "wins"** when a row qualifies for multiple conditions. Place your most specific or highest-priority rules at the top. > **Tip:** To reorder, drag the rule cards in the panel. The order is saved immediately. **Color Scales and evaluation order** Color Scales participate in the same sequence as Condition Rules. A Color Scale rule that sits above a Condition Rule colors every value in its column, effectively preventing lower Condition Rules from coloring cells in that column. If you want Condition Rules to take precedence over a Color Scale, place the Condition Rules above the Color Scale in the list. ## Focus mode Click any rule card to activate **focus mode** for that rule. In focus mode: - Rows matching the focused rule are displayed normally with the rule's highlight. - Non-matching rows are dimmed. - A banner appears above the grid showing how many rows match: *"Highlighting 14 of 200 rows for brand is 'BasicWear'"*. **To exit focus mode:** click the same rule card again. For Color Scales, the banner reads *Color scale on* followed by the column name. Click the **X** at the right end of the banner to leave focus mode. ### Filter to the matching rows For Condition Rules, the banner also has a filter button (tooltip **Filter to matching rows**). It is not shown for Color Scales. Click it to show only the matching rows. The banner then reads *Showing 14 of 200 rows · Filtered by* followed by the rule, with a 3-dot menu and a close button that removes the filter. The filter is a temporary view of the grid and does not add a pipeline task. The 3-dot menu has these actions: - **Convert this filter into a Pipeline Task**: opens the Conditional Filter panel pre-filled with the rule's condition. The task is added only when you apply it. - **Create new view with this filter applied**: creates a new View that contains a Conditional Filter task with the rule's condition. - **Copy values to clipboard**: copies the visible columns of the matching rows, tab-separated with a header row. - **Export list as CSV**: downloads the matching rows as a CSV file. The first two actions are hidden in preview mode. ![Focus banner showing the rule region is North as a filter chip, with its menu open: Convert this filter into a Pipeline Task, Create new view with this filter applied, Copy values to clipboard, Export list as CSV](https://mammoth.io/docs/images/20261009_120500_Highlight-FilterBanner-Menu.webp) Focus mode shows you exactly which rows a rule affects—useful for verifying conditions before sharing a View. ## Color reference ### Solid colors—condition rules 18 swatches are available across two groups: **Background colors (8):** apply a background fill to matching cells. **Text-only colors (10):** change only the font color; no background fill is applied. ### Gradient presets—color scales | Preset | Low value | Mid value | High value | Colors change at | | --- | --- | --- | --- | --- | | Red → Yellow → Green | Red | Yellow | Green | Yes | | Green → Yellow → Red | Green | Yellow | Red | Yes | | Red → White → Green | Red | White | Green | Yes | | White → Blue | White |—| Blue | No | | White → Red | White |—| Red | No | | White → Green | White |—| Green | No | ## Example: Budget performance monitoring Your monthly sales report has a `Monthly Sales` column. Your team target is $10,000. You want to immediately see who is on target, who is close, and who has missed significantly—without sorting or filtering. Rule setup: | Rule | Condition | Color | Position | | --- | --- | --- | --- | | 1 | Monthly Sales >= 10,000 | Green background | Top (highest priority) | | 2 | Monthly Sales >= 9,000 | Yellow background | Second | | 3 | Monthly Sales < 9,000 | Red background | Third | With this stack, any rep at or above target turns green immediately. Reps between $9,000 and $9,999—within 10% of the target—turn yellow. Everyone else turns red. Because rule 1 is evaluated first, a rep who hits $15,000 is correctly shown as green and rules 2 and 3 are never checked for that row. **To adjust for a different target:** edit rule 1 and rule 2 with the updated threshold values. Rule 3 (`< 9,000`) automatically colors everything the first two rules do not match. > **Rows with empty sales values** are not matched by any of these three rules (an empty cell does not equal a number) and will appear unhighlighted. Use an **Is empty** condition in a fourth rule if you want to flag missing data separately. ## Troubleshooting reference errors A **warning icon** on a rule card means that one or more columns referenced in the rule can no longer be found in the View, or their type has changed. This can happen when: - A column was removed from the dataset. - A column's data type was converted (for example, from Text to Numeric) and the rule referenced it as a different type. **What to do:** 1. Click **Edit** on the rule card. 2. A warning banner at the top of the builder identifies the affected columns. 3. Remove the errored column from the condition or replace it with a valid column. 4. Click **Save highlight**. > **Note:** The **Save highlight** button is disabled while any column in the builder has a reference error. You must remove or replace the errored column before you can save changes. A saved rule that references a column that no longer exists is skipped when the grid is colored, so it has no visual effect until you fix it. You cannot save **any** changes to the rule—including changes to still-valid conditions—until the errored column is removed or replaced. Open the builder, remove the errored column, then click **Save highlight**. ## Quick reference | Task | How | | --- | --- | | Open the Conditional Highlights panel | Action bar → **Conditional Highlights** | | Open the panel with a column pre-selected | Column 3-dot menu → **Conditional Highlights** | | Add a rule | **New conditional highlight** in the panel | | Reorder rules | Drag rule cards in the panel | | Enable or disable a rule | Toggle on the rule card | | Edit a rule | **Edit** on the rule card | | Delete a rule | **Delete** on the rule card → confirm | | Activate focus mode | Click a rule card | | Exit focus mode | Click the same rule card again | | See how many rows match a rule | Activate focus mode—the banner shows the count | --- # Pipeline controls URL: https://mammoth.io/docs/learn/transform/controls/ · Updated: 2026-11-02 Add Data Check and Checkpoint controls to a Mammoth pipeline to validate output automatically, send alerts, or pause for human approval before data moves on. Controls are pipeline tasks that add quality gates and human touchpoints to your data workflows. Instead of letting a pipeline run silently from start to finish, Controls let you define what "good" data looks like and what should happen when data doesn't meet that standard—all without writing custom transforms. ![Transform menu open on the Controls category, listing Data Check and Checkpoint](https://mammoth.io/docs/images/20260427_104851_controls-menu-both-items1.webp) Mammoth has two Pipeline Controls, Data Check and Checkpoint. The table compares them. ## Controls at a glance | | **Data Check** | **Checkpoint** | | --- | --- | --- | | **What it does** | Automatically validates your data against rules you define | Sends notifications and optionally pauses the pipeline for human review | | **When to use** | When you need to catch bad data before it reaches downstream tasks | When a human needs to review data or approve before the pipeline continues | | **Fail behavior** | Pause the pipeline or flag and continue | Notify only or pause for approval | | **Downstream effect** | Optional email notification on failure; downstream tasks do not run if the pipeline is paused | Email notification (and optional webhook); pipeline pauses until approved | | **Partial rerun** | Marked Bypassed if it sits before the task you rerun from | Marked Bypassed if it sits before the task you rerun from, unless it is already waiting for approval or approved | ## When to use each **Use a Data Check when:** - You want automated, rule-based validation—no human needed - You need to catch issues like empty columns, unexpected row counts, or values out of range - A bad dataset should stop the pipeline automatically **Use a Checkpoint when:** - A person needs to review the data at a certain point before it continues - You want a notification sent to your team when a critical pipeline task completes - You need an audit trail showing that a human reviewed and approved the output **Use both together** for high-stakes pipelines: add a Data Check after ingestion to catch obvious data quality issues automatically, then add a Checkpoint before the final output task so a team lead can review before the report goes out. ## Data Check A Data Check is an automated quality gate attached to a pipeline task. After the task runs, the Data Check evaluates the output against rules you define—checking things like row count, null rates, or value ranges. If the output doesn't meet your standards, the pipeline either halts or continues with a flag, depending on your configuration. ![Data Check panel with a Row count check row, the If check fails choice set to Pause the pipeline, and a Notify on failure checkbox](https://mammoth.io/docs/images/20261009_132022_DataCheck-Panel-RowCount.webp) > **3 essential checks for any pipeline** > > Not sure where to start? These three checks cover common data issues: > > - **Row count ≥ 1**—catches empty output from an upstream failure > - **Null percentage < 5%** on your key identifier column—catches broken joins or missing source data > - **Value range** on your primary numeric column—catches sign errors, unit mismatches, or corrupt values > > Add these after your first ingestion task to catch common pipeline failures early. ## Adding a Data Check to your pipeline 1. Open the Transform menu and choose the **Controls** category. 2. Select **Data Check**. 3. Choose a check type (see [Check types](#check-types) below) and configure it. Use **Add check** to add more checks. 4. Choose what happens if the check fails and, optionally, turn on **Notify on failure**. 5. Click **Apply**. The Data Check appears in the Pipeline panel and evaluates the output of the task before it. > **One Data Check per task position.** To validate multiple rules at the same position, add them as separate checks within a single Data Check using the **Add check** button inside the form—not by adding a second Data Check. ## Check types A Data Check can contain one or more checks, each targeting a specific quality rule. Choose the type from the tiles shown when you open the form, or from the type dropdown on each check. ![Check type dropdown open, listing Row count, Null percentage and Unique values with a short description for each](https://mammoth.io/docs/images/20261009_132022_DataCheck-CheckType-Dropdown.webp) ### Null percentage The Null percentage check tests the percentage of null or empty values in a column. | Condition | Meaning | | --- | --- | | is less than | Null % must be below the threshold | | is greater than | Null % must be above the threshold | | is exactly | Null % must equal the threshold exactly | **Parameters:** Column name, threshold (a percentage) **Example:** Ensure the `customer_email` column has fewer than 1% nulls after a data join—catching broken joins before they silently drop records. ### Row count The Row count check tests the total number of rows in the pipeline output. | Condition | Meaning | | --- | --- | | is at least | Row count must be ≥ value | | is at most | Row count must be ≤ value | | is exactly | Row count must equal value | | is between | Row count must fall within min–max range | **Parameters:** Single value (for most conditions) or min/max (for "is between") **Example:** Ensure a daily sales feed always has at least 1,000 rows—catching upstream data source failures before they produce empty reports. ### Unique values The Unique values check tests whether values in a column are unique. Empty values are not counted. | Condition | Meaning | | --- | --- | | 100% unique (no duplicates) | Every value must be distinct | | Uniqueness at least... | At least the percentage you enter must be unique | **Parameters:** Column name, and a percentage for the second condition **Example:** Ensure an `order_id` column has no duplicates after a join—catching fan-out issues that would inflate aggregation totals. ### Value range The Value range check tests whether values in a numeric column fall within acceptable bounds. | Condition | Meaning | | --- | --- | | between | Column values must fall within min–max range | | is at least | Column values must be ≥ value | | is at most | Column values must be ≤ value | | is positive | Column values must be > 0 | | is negative | Column values must be < 0 | **Parameters:** Column name, value or min/max range, and a **tolerance** dropdown: *Fail if any row violates*, *Fail if > 1% violate*, *Fail if > 5% violate*, or *Fail if > 10% violate* The tolerance setting is useful for real-world data where a small number of edge-case values are acceptable. A 1% tolerance means the check passes if at most 1% of rows violate the rule. **Example:** Ensure that `transaction_amount` is always positive with a 1% tolerance—allowing for rare credit/reversal entries without failing the entire pipeline. ### Custom prompt The Custom prompt check lets you write a data quality rule in plain language and have Mammoth generate the SQL for you. ![Data Check with Custom prompt selected, showing a plain-language prompt box and a Generate SQL button](https://mammoth.io/docs/images/20261009_132022_DataCheck-CustomPrompt.webp) 1. Select **Custom prompt** as the check type (the tile is labeled *Write your own rule*) 2. In the text box, type a plain-language description of your rule (e.g., *"all prices must be positive"*, *"revenue should not exceed 10 million"*) 3. Click **Generate SQL**—Mammoth sends the description to an AI model and generates a SQL condition 4. Review the **Generated SQL** shown below the text box 5. Click **Apply** to save the Data Check The generated SQL runs as a condition against the full pipeline output table. **Example:** *"the discount percentage should never exceed 100"* → generates `discount_pct <= 100` ## Multiple checks: Any vs. all A single Data Check can contain multiple checks evaluated together. ![Data Check with two checks, a Null percentage and a Unique values check, and the Any or All selector for If check fails](https://mammoth.io/docs/images/20260427_105204_anyVSall1.webp) When a Data Check has two or more checks, the failure sentence reads *If [Any | All] check fails*. The **Any** / **All** toggle controls how results are combined: | Setting | Behavior | | --- | --- | | **Any** *(default)* | The Data Check fails if **any** check fails—all checks must pass | | **All** | The Data Check fails only if **all** checks fail—one passing check is enough to keep the pipeline going | > **"All" is more lenient than it sounds.** > > "All" doesn't mean "all checks must pass." It means "all checks must fail" to trigger failure. Use **Any** (the default) if you want a single failed check to halt or flag the pipeline. Use **All** only when the checks are alternatives—where passing any one of them is acceptable. ## Fail behavior Set what happens when the Data Check fails: | Setting | What happens | | --- | --- | | **Pause the pipeline** | Pipeline execution stops. Downstream tasks are blocked until the data is fixed or approved, or you change the check threshold, and the pipeline is rerun. | | **Flag and continue** | The failure is flagged, but the pipeline continues running to completion. | **When to use pause:** Use for financial reports, regulated outputs, or any pipeline where bad data reaching the final output is unacceptable. **When to use flag and continue:** Use for operational data where analysts can work with partial data, or when you want to surface data quality as a metric rather than a blocker. ![If check fails choice with Pause the pipeline selected beside Flag and continue, a Notify on failure checkbox and an info banner](https://mammoth.io/docs/images/20261009_132022_DataCheck-IfCheckFails.webp) > If **Notify on failure** is on, the email is sent regardless of which fail behavior is selected. ## Email notifications Select **Notify on failure** and choose recipients to send an email when the Data Check fails. At least one recipient is required. The notification email includes: - The View name, the project name, and a link to the View - The position of the Data Check in the pipeline (for example, task 3 of 8) - The status and details of each individual check, including the measured value - Whether the pipeline was paused Recipients are chosen from the project member list. ## Parameter bindings Instead of hardcoding threshold values, you can bind numeric check values to **parameters**—making the same pipeline reusable across different environments or execution contexts. ![Data Check configuration form showing a Row count check with an is at least operator and a threshold of rows](https://mammoth.io/docs/images/20261009_132022_DataCheck-Panel-RowCount.webp) **Example use case:** A pipeline runs in both development (where you expect small test datasets) and production (where you expect full-volume data). Instead of maintaining two separate pipelines: 1. Create a Number parameter `min_rows` 2. In the Data Check, click the parameter icon next to the row count value 3. Select `min_rows` as the bound parameter 4. Set `min_rows = 10` for dev runs and `min_rows = 50000` for production runs The same pipeline, same Data Check, different effective thresholds per environment. ## Understanding check results and status After a pipeline run, each Data Check shows one of four statuses: | Status | Meaning | | --- | --- | | **Passed** | The checks met the Any/All rule | | **Failed** | The checks did not meet the Any/All rule | | **Not run** | The Data Check has not run yet | | **Bypassed** | The check was skipped during a partial rerun because it sits before the task you reran from | Open the status to see the **Data Check** results, which show each individual check with its column, condition, result, and status. If a check references a column that is no longer available, the modal asks you to edit the Data Check to fix the configuration. ![Data Check Failed dialog with the failed check, run details and an Edit Data Check button](https://mammoth.io/docs/images/20261009_131917_DataCheck-Failed-Dialog.webp) ## Pending data checks When a Data Check fails, it appears in the **Governance** section of the **Needs Attention** tab in **Monitor** as *Data check failed*, with a summary such as *1 of 2 checks failed*. Click **Review** to open the View. ![Monitor Needs Attention tab with an Errors section listing an error running a pipeline and a Governance section listing Data check failed with the summary 1 of 1 checks failed](https://mammoth.io/docs/images/20261009_130549_Monitor-NeedsAttention-Governance-DataCheckFailed.webp) Once you've resolved the underlying data issue and rerun the pipeline successfully, the pending item clears. ## Checkpoint A Checkpoint pauses your pipeline at a specific task to notify your team or wait for explicit approval before continuing. Use it when a human needs to know that data has reached a certain state—or when a human needs to review and sign off before the pipeline proceeds. > **Received an approval request?** If you're here because you got an approval email, jump to [Reviewing and approving a gate →](#reviewing-and-approving-a-gate) ## Alert versus Approval Gate | | **Alert** | **Approval Gate** | | --- | --- | --- | | **What it does** | Sends notifications and immediately continues the pipeline | Sends notifications and **pauses** the pipeline until someone approves | | **Requires action** | No—pipeline continues automatically | Yes—a project member must click Approve and Continue | | **Use when** | You want visibility without a manual step | You need a human review before data moves forward | | **Status after triggering** | Sent | Pending (the status window shows *Pending Approval*) | ## Adding a checkpoint to your pipeline 1. Open the Transform menu and choose the **Controls** category. 2. Select **Checkpoint Alert**. 3. Under *When the pipeline reaches this checkpoint*, choose **Notify only** (an Alert) or **Pause for approval** (an Approval Gate). 4. Select email recipients from the project members, and optionally add a webhook. 5. Optionally click **Add a message** to include context in the email. The message is also shown to the approver in the status window for an Approval Gate. 6. Click **Apply**. The Checkpoint appears in the Pipeline panel, labeled with its type and the number of recipients (for example, *Approval Gate - 2 recipients*). ## Configuring email notifications Add one or more project members as notification recipients. They receive an email when the Checkpoint is triggered—either immediately (Alert) or when approval is needed (Approval Gate). The email includes: - The View name, the project name, and a link to the View - The position of the Checkpoint in the pipeline (for example, task 4 of 8) and when it triggered - Whether it is an Alert (*Checkpoint reached*) or an Approval Gate (*Approval required*) - The custom message, if you added one ## Configuring webhook notifications Click **Add webhook** and enter a URL (must start with `https://`) to notify an external system (Slack, Teams, PagerDuty, a custom endpoint, etc.) when the Checkpoint triggers. Mammoth sends the request with a 10-second timeout. **The payload Mammoth sends is fixed—it is not user-configurable.** Every checkpoint webhook sends this JSON body in a POST request: ```json { "checkpoint_id": 123, "checkpoint_name": "Finance team approval before final report", "checkpoint_type": "approval", "task_sequence": 4, "dataview_id": 654, "dataview_name": "View 1", "workspace_id": 22 } ``` `checkpoint_type` is `"alert"` or `"approval"`. > **Test payload editor:** Click **Payload** under the webhook URL to open a payload editor, then click **Test** to send your draft from your browser to the URL and confirm it's reachable. The result shows *Delivered · 200* or *Endpoint returned an error*. **Test** is available only when the payload is filled in. It accepts `{{pipeline_name}}`, `{{pipeline_id}}`, `{{checkpoint_type}}`, `{{step_number}}`, `{{step_name}}`, `{{timestamp}}`, `{{status}}`, `{{project_name}}`, and `{{triggered_by}}` as placeholder tokens, with a 10KB size limit and a 5-level nesting limit. Unknown tokens are sent as-is. This editor is for testing only—whatever you enter here is never saved and has no effect on what's sent when the Checkpoint actually triggers. The real trigger always sends the fixed payload shown above. Either email or webhook (or both) must be configured—a Checkpoint with no notification method is not valid. If you turn on email, select at least one recipient. ## Approval Gate: the full workflow When a pipeline reaches an Approval Gate Checkpoint during execution: 1. **Pipeline pauses.** Execution stops at the Checkpoint task. Downstream tasks do not run. 2. **Notifications are sent.** All configured email recipients receive a notification. Any configured webhook fires. 3. **Status changes to pending.** The Checkpoint in the Pipeline panel shows a *Pending* chip, and its status window is titled *Checkpoint Alert - Pending Approval*. ![Checkpoint Alert panel with the Notify only and Pause for approval choices, a Notify by email field, and Add a message and Add webhook links](https://mammoth.io/docs/images/20261009_132120_Checkpoint-Alert-Panel.webp) 4. **A reviewer signs in** to Mammoth, opens the View, and opens the Checkpoint status window. Any project member can approve. 5. **The reviewer inspects the data.** They can view the pipeline output at this stage—the data is available even though the pipeline is paused. 6. **The reviewer clicks Approve and Continue.** A confirmation, *Approve this checkpoint?*, asks them to click **Yes, Approve**. ![Checkpoint - Pending Approval dialog with run details, people notified, and Cancel and Approve and Continue buttons](https://mammoth.io/docs/images/20260427_111854_pending-checkpoint-approval-modal1.webp) 7. **Pipeline resumes.** Mammoth continues execution from the task after the Checkpoint. 8. **Status changes to Approved.** The Checkpoint shows an *Approved* indicator. ## Reviewing and approving a gate *This section is for reviewers who received an approval request email.* You received an email because a data pipeline you oversee has paused at an Approval Gate and is waiting for your review before it continues. **To approve:** 1. Click the link in the approval email—it takes you directly to the View in Mammoth 2. Sign in if prompted (you need a Mammoth account with access to this project) 3. In the Pipeline panel, click the **Pending** chip on the Checkpoint task 4. The Checkpoint status window opens—review the *Message from pipeline owner* and inspect the pipeline data if needed 5. Click **Approve and Continue** 6. In the confirmation, *Approve this checkpoint?*, click **Yes, Approve** 7. The pipeline resumes automatically Once approved, the Checkpoint shows *Approved* and the pipeline continues running. ## Understanding checkpoint status | Status | Meaning | | --- | --- | | **Sent** | An Alert Checkpoint triggered—notifications were sent and the pipeline continued | | **Pending** (*Pending Approval* in the status window) | An Approval Gate triggered—the pipeline is paused, waiting for a reviewer to approve | | **Approved** | A reviewer approved the gate—the pipeline has resumed or completed | | **Bypassed** | The Checkpoint was skipped during a partial rerun (see below) | ## Pending checkpoints When an Approval Gate Checkpoint is waiting for approval, it appears in the **Governance** section of the **Needs Attention** tab in **Monitor** as *Checkpoint: approval required*, showing the View and a line such as *Task 4 of 8 is waiting for approval*. ![Pending Items dialog, Pending Checkpoints tab, listing one checkpoint waiting with a Review & Approve button](https://mammoth.io/docs/images/20260427_113608_pending-checkpoints-with-items.webp) Click **Approve** on the row to open the View, where you can inspect the data and approve. ## Partial rerun behavior When you rerun a pipeline from a specific task (not from the beginning), Checkpoints that sit before that task are marked **Bypassed**, unless they are already waiting for approval or approved, in which case they keep that status. A Bypassed Checkpoint is not triggered again for the partial rerun, so no notification is sent and no approval is requested. The pipeline proceeds past it automatically. This is expected behavior. If you want the Checkpoint to be re-evaluated from scratch, run the full pipeline from the beginning. --- # Date, Numeric & Text URL: https://mammoth.io/docs/learn/transform/date-numeric-text/ · Updated: 2026-11-02 Reference for the Date, Numeric & Text functions in Mammoth: shift and extract dates, build calculations, rank rows, extract and format text, and parse JSON. The Date, Numeric & Text category handles transformations that work on the values inside your columns—converting and manipulating dates, building numeric calculations, and cleaning up text. Unlike display-level formatting, these are pipeline tasks: they modify your data and re-run every time the pipeline refreshes. To open the function list, click the **"Describe your transformation"** bar (or a **+** button in the Pipeline panel) and select **Date, Numeric & Text**. ## Date Tools ### Add / Subtract Date Values Add / Subtract Date Values shifts a date column forward or backward by a specified number of time units. Useful for calculating deadlines, expiry dates, or aligning dates across periods. ![Add / Subtract Date Values panel adding 30 days to event_date, with the result placed in a new column New_event_date](https://mammoth.io/docs/images/20260511_174541_add_subtract_date1.webp) **How to configure:** - **Select column**—choose the date column to shift. - **Select behaviour**—choose **Add** or **Subtract**. - **Duration fields**—enter a value in one or more of the time fields: Years, Months, Weeks, Days, Hours, Minutes, Seconds. Fields left at 0 are ignored. - **Date format**—click the calendar icon next to the result column options to choose how the resulting date displays, with **Universal**, **US**, and **UK** format groups. - **Add Condition**—optionally restrict the shift to rows that meet a condition. - **Place in**—choose **New Column** and enter a name, or choose **Existing Column** and select the column to overwrite from the dropdown. **Example:** To calculate a review date 30 days after a contract start, select `contract_start`, choose Add, enter 30 in the Days field, and name the new column `review_due`. ### Extract Date Part Extract Date Part pulls a single component out of a date column—year, month name, week number, weekday, hour, and more—and writes it as a new column. ![Extract Date Part panel with event_date selected, date part Day (number), and result column Days](https://mammoth.io/docs/images/20260511_174622_extract_date1.webp) **How to configure:** - **Select column**—choose the date column to extract from. - **Select date part**—choose the component to extract. The following parts are available: | Date part | Returns | | --- | --- | | Year (number) | e.g. 2024 | | Quarter (number) | e.g. 1, 2, 3, 4 | | Month (number) | e.g. 1–12 | | Month name (text) | e.g. "March" | | Week of the year (number) | e.g. 1–52 | | Weekday (text) | e.g. "Monday" | | Day (number) | e.g. 1–31 | | Day of year (number) | e.g. 1–365 | | Hour (number) | e.g. 0–23 | | Minutes (number) | e.g. 0–59 | | Seconds (number) | e.g. 0–59 | | Millisecond (number) | e.g. 0–999 | | Time without milliseconds (text) | e.g. "14:40:45" | | Time with milliseconds (text) | e.g. "14:40:45.123" | | Year & Month (text) | e.g. "2024 March" | | Year & Month Number (text) | e.g. "2024-03" | | Date part without time (date) | Date value with time stripped | | Date part without time (text) | Same, returned as text | **Example:** To group sales by month, extract **Month name** from your `order_date` column. The new column will contain values like "January", "February"—ready to use as a group-by dimension in a pivot. ### Calculate Date Difference Calculate Date Difference finds the time between two dates and returns the result as a number. Either end of the calculation can be a date column or the current time (UTC). ![Calculate Date Difference panel with Start Date and End Date each set to Date Column or Current Time (UTC), a Select Unit dropdown, and a new number column name](https://mammoth.io/docs/images/20261009_132532_CalculateDateDifference-Panel.webp) **How to configure:** - **Start Date**—select **Date Column** and choose a column, or select **Current Time (UTC)**. When Current Time (UTC) is selected, the column dropdown disappears. - **End Date**—same options as Start Date. - **Select Unit**—choose the unit for the result, such as years or days. - **Place in**—choose **New Column** and enter a name, or choose **Existing Column** and select the column to overwrite. > Only date-type columns appear in the dropdowns. If your dates are stored as text, use **Convert Column Type** in Column Management first. **Example:** To measure how long orders take to ship, set Start Date to `order_date`, End Date to `ship_date`, unit to Days, and name the output `days_to_ship`. To show how many days have passed since each customer signed up, set Start Date to `signup_date` and End Date to Current Time (UTC). ## Numeric Tools ### Math Function Math Function creates a calculated column by evaluating a formula across your data row by row. As you type in the expression field, Mammoth suggests available functions and column names—select any suggestion to insert it. ![Math Function panel with the formula event_duration_days + 10 and result column event_updated_days](https://mammoth.io/docs/images/20260511_174825_Screenshot2026-04-27110615.webp) **How to configure:** - **Expression field**—type your formula using column names in double quotes, arithmetic operators (+, −, *, /), and parentheses. An autocomplete list appears as you type—select a column name or function to insert it. - **Place in**—choose **New Column** and enter a name, or choose **Existing Column** to overwrite one. Use the format controls on the right to set the number format. **Built-in functions:** `COUNT()` · `SUM("Column")` · `AVG("Column")` · `MIN("Column")` · `MAX("Column")` · `STDDEV("Column")` · `INT(expression)` · `ABS(expression)` **Examples:** - `"unit_price" * "quantity_sold"`—calculates line revenue per row - `("actual" - "target") / "target" * 100`—percentage variance against target - `INT("total_revenue" / 12)`—monthly average rounded to a whole number ### Window Function Window Function runs a calculation across your data while keeping every row intact. Where Group & Pivot produces one summary row per group, a window function adds the result as a new column alongside the original rows—the right choice for rankings, running totals, and row-to-row comparisons. ![Window function panel with Rank selected, a Limit ranking result toggle, Group by and Add Sort controls, and a Place in new number column field](https://mammoth.io/docs/images/20261009_120100_WindowFunction-Rank.webp) **How to configure:** - **Select function**—choose the function to apply. Available functions: Sum, Average, Min, Max, Standard Deviation, Variance, Count, Row number, Rank, Dense rank, Percent rank, Cumulative percent rank, N tile, First Value, Last value, Nth value, Lead, Lag. - **Select column**—choose the column to run the function on. It is shown for Sum, Average, Min, Max, Standard Deviation, Variance, First Value, Last value, Nth value, Lead and Lag. Count, Row number, Rank, Dense rank, Percent rank, Cumulative percent rank and N tile need no source column. - **Value of N**—shown for N tile and Nth value. N tile needs a whole number of 2 or more; Nth value needs a whole number of 1 or more. - **Type**—shown for Sum, Average, Min, Max, Standard Deviation, Variance, Count, First Value, Last value, Nth value and N tile. The default is **Accumulate**: - **Accumulate**—builds the result row by row. For example, running a Sum on values 5, 10, and 15 produces 5, 15, and 30. - **Aggregate**—calculates a single summary for a group and stamps it on every row in that group. For instance, if a group's total is 30, every row in that group shows 30. - **Offset**—shown for Lead and Lag: a whole number of 1 or more. - **Limit ranking result**—for Row number, Rank and Dense rank, turn on this toggle to enter **Limit to following no. of rows** and keep only the top ranks. - **Group by**—partitions the calculation within groups—for example, ranking rows within each region separately rather than across the whole dataset. - **Add Sort**—defines the order rows are processed. It appears for Row number, Rank, Dense rank, Percent rank, Cumulative percent rank, Lead and Lag, and for the other functions when Type is Accumulate. - **Place in**—give the new column a name, or choose an existing column to overwrite. **Example:** To rank customers by revenue within each region, select **Rank**, click Group by and select `region`, then click **Add Sort**, choose `revenue` and sort descending. Every customer row gets a rank relative to their region, not the whole dataset. ### Obtain Large or Small Values Obtain Large or Small Values compares a set of numeric columns row by row and returns the Nth largest or smallest value. You can include a fixed number in the comparison alongside the column values. ![Obtain Large or Small Values panel with numeric columns selected, 1st smallest value, and a preview table](https://mammoth.io/docs/images/20260511_175724_obtain_small_large1.webp) **How to configure:** - **Select columns**—check the numeric columns to compare (at least two). Use the search box to find columns quickly. - **Select Nth**—set the rank to return: 1st, 2nd, 3rd, and so on. - **Largest value / Smallest value**—choose the direction of the comparison. - **Add a custom value to compare**—optionally include a fixed number in the comparison. It is treated as an additional column and appears in the Preview as its own column. - **Preview**—updates in real time to show the result for each row as you configure. - **Place in**—give the output column a name, or choose an existing column to overwrite. **Example:** If you have three supplier price columns—`supplier_a_price`, `supplier_b_price`, `supplier_c_price`—select all three, set ordinal to 1st, and choose Smallest value. The result column shows the cheapest quote for each row, making it easy to identify the best supplier per product. ## Text Tools ### Extract Text Extract Text pulls a specific pattern of text out of a column. You can describe what you want in plain language and let Mammoth build the pattern, or select a method and configure it directly. **How to configure:** - **Select column**—choose the text column to extract from. - **Select extraction method**—choose how to define the pattern. The default is **Custom Prompt**. - **Add Condition**—optionally restrict the extraction to rows that meet a condition. - **Place in**—choose **New Column** and enter a name, or choose **Existing Column**. **Extraction methods** **Custom Prompt**—Describe what you want to extract in plain language and click **Generate**. Mammoth builds a regex pattern automatically and shows a live example using real values from your column—for example, "Cotton T-Shirt will result in Shirt." To adjust the generated pattern, click the edit icon next to the regex to open the **Edit Regex** modal, modify the **Regex Formula** field, and click **Save changes**. ![Extract Text panel with event_id selected, the Custom Prompt method, a prompt, and result column Event_Key](https://mammoth.io/docs/images/20260511_175031_extract_text1.webp) **Pattern-based methods**—Choose a method such as Characters from beginning or to end, Characters in a certain position, Starts with, Ends with, Contains a number, or similar. The panel shows a small set of inputs specific to that method—a direction, a character count, or a match value. An inline example updates in real time using actual data from your column. The full list of pattern-based methods: Characters around a letter / word, Characters from beginning or to end, Characters in a certain position, Contains a number, Does not contain a number, Does not end with, Does not end with a number, Does not start with, Does not start with a number, Ends with, Ends with a number, Starts with, Starts with a number. **Regular expression / All except regular expression**—Enter a regex pattern directly in the text field. **Regular expression** extracts text that matches the pattern. **All except regular expression** extracts everything that does not match. An inline example updates as you type. **Example:** On a `product_code` column containing values like "REF-2045 Blue Widget", use Custom Prompt with the description "extract the code before the first space" to get "REF-2045" in a new column. For a more structured case—extracting the first 3 characters of every value—use **Characters from beginning or to end**, set direction to Beginning, and enter 3. ### Text Formatting Text Formatting standardizes the capitalization or spacing of one or more text columns. You can apply it to several columns at once and restrict it to specific rows using a condition. ![Text Formatting panel with two text columns selected and Change text case set to UPPER CASE](https://mammoth.io/docs/images/20260421_055932_Text-format-config1.webp) **How to configure:** - **Select columns**—check one or more text columns from the list. Selected columns appear as chips in the **Review selected columns** area. Click the X on a chip to remove it, or click **Clear** to deselect all. - **Add Condition**—optionally restrict the formatting to rows that meet a condition. - **Change text case**—tick the checkbox and choose **UPPER CASE**, **lower case**, or **Capital Case** from the dropdown. - **Normalize whitespace**—tick the checkbox to strip leading, trailing, and extra spaces between words. - The preview on the right updates as you configure. Check it before applying. **Example:** A `category` column imported from an external system contains "shirts", "Shirts", and "SHIRTS" for the same product type. Applying UPPER CASE standardizes all values to "SHIRTS"—preventing mismatches when joining this dataset with another source. ### Extract JSON Extract JSON expands JSON-formatted data stored in a column into structured columns or individual rows. The panel adapts based on the structure of your JSON and how you want to extract it. ![Extract JSON panel with a JSON source column, Dictionary type, Extract as Columns, and a list of keys to extract](https://mammoth.io/docs/images/20260421_055955_ExtractJSON1.webp) **How to configure:** - **Select source column**—choose the column containing your JSON data. - **JSON Type**—choose the structure: - **Dictionary**—named key-value pairs, for example `{"city": "London", "country": "UK"}` - **Array/List**—an ordered list, for example `["London", "UK", "Europe"]` - **Extract as**—choose **Columns** to create one column per value, or **Rows** to expand each value into a separate row. - **Keep source column in the grid**—tick to retain the original JSON column alongside the extracted output. - **Keys to be extracted**—this section changes based on your selections: - **Dictionary → Columns:** Click **Add Key**, type the key name, and set its output type to Text or Number. Repeat for each key. Use **Regenerate Keys** to detect keys automatically, or **Remove all** to clear the list. - **Array/List → Columns:** Enter the number of columns to create (up to 20) and choose a single output type—Text or Number—for all of them. - **→ Rows:** Choose the output column type—Text or Number. No key configuration is needed. **Example:** A `shipping_address` column contains `{"city": "London", "postcode": "EC1A", "country": "UK"}` for each row. Select Dictionary → Columns, add three keys—`city` (Text), `postcode` (Text), `country` (Text)—and apply. Each key becomes its own column, making address data immediately usable for filtering and grouping. --- # Filter, Label & Replace URL: https://mammoth.io/docs/learn/transform/filter-label-replace/ · Updated: 2026-11-02 Reference for the Filter, Label & Replace functions in Mammoth: Conditional Filter, Remove Duplicate Rows, Edit Cells, Fill Missing Values and Bulk Replace. The Filter, Label & Replace category has functions for filtering rows, editing values, and standardizing data. The Transform menu organizes them into three groups: **Filter**, **Label & Edit**, and **Replace**. ![Transform menu on Filter, Label & Replace, listing Conditional Filter, Remove Duplicate Rows, Edit Cells and more](https://mammoth.io/docs/images/20260511_164917_filter-label-replace-menu-full1.webp) ## Filter ### Conditional Filter Conditional Filter keeps or removes rows based on one or more conditions you define. Apply it early in your pipeline to reduce the data volume that downstream tasks need to process. ![Conditional Filter Builder tab with an AI prompt box, a Keep or Remove choice, and empty column and operator pickers](https://mammoth.io/docs/images/20260511_164314_conditional-filter-builder-tab1.webp) #### Opening Conditional Filter Click the **+** button in the pipeline panel, navigate to **Filter, Label & Replace**, and select **Conditional Filter**. The panel opens in **Builder** (visual) mode. If SQL mode is enabled for your workspace, a **SQL** / **Builder** toggle at the top switches between the two. #### AI-assisted generation Click the **Describe what you want to generate** bar, type a plain-English description (for example, *"Show entries where hotel class is 5-Star and region is Europe"*) and click **Generate**. Mammoth builds the condition automatically in whichever mode is active. Use the revert button beside Generate to go back to the previous result. #### Builder mode Builder mode lets you define conditions using dropdowns without writing any SQL. **Keep / Remove toggle** At the top of the condition area, choose **Keep** or **Remove** in front of "values where…": - **Keep**—only rows that match your conditions remain in the output. - **Remove**—rows that match your conditions are excluded from the output. This toggle applies to the entire task and all conditions within it. **Defining a condition** Each condition row has four parts: | Part | Description | | --- | --- | | **Column** | Pick any column from the dataset. The column type (Text, Number, or Date) determines which operators are available. | | **Operator** | The comparison rule. See operator tables below. | | **Comparison type** | Choose what to compare against: a fixed **Value**, another **Column Value**, or a **Parameter**. | | **Input** | For Value: type or select from auto-suggestions drawn from actual column data. For Column Value: pick a second column. For Parameter: select a named parameter. | A **Condition Summary** below the builder restates the condition in words as you build it. **Text column operators** | Operator | Keeps rows where the column value… | | --- | --- | | is | exactly equals the specified value, or any one of several values you enter | | is not | does not equal the specified value, or any of several values you enter | | contains | includes the specified text, or any one of several texts you enter, anywhere | | does NOT contain | does not include the specified text anywhere | | starts with | begins with the specified text | | ends with | ends with the specified text | | does NOT start with | does not begin with the specified text | | does NOT end with | does not end with the specified text | | is Empty | is null or blank | | is NOT Empty | has any non-null, non-blank value | **Numeric column operators** | Operator | Keeps rows where the column value… | | --- | --- | | is | exactly equals the number, or any one of several numbers you enter | | is not | does not equal the number, or any of several numbers you enter | | is less than | is strictly less than the number | | is less than or equal to | is less than or equal to the number | | is greater than | is strictly greater than the number | | is greater than or equal to | is greater than or equal to the number | | is MAX value | equals the maximum value in the column | | is NOT MAX value | does not equal the maximum value | | is MIN value | equals the minimum value in the column | | is NOT MIN value | does not equal the minimum value | | is Empty | is null | | is NOT Empty | has any non-null value | | in between (exclusive) | falls between two numbers, not including the endpoints | **Date column operators** | Operator | Keeps rows where the column value… | | --- | --- | | is | equals the specified date | | is NOT | does not equal the specified date | | is later than | is after the specified date | | is on or later than | is on or after the specified date | | is earlier than | is before the specified date | | is on or earlier than | is on or before the specified date | | in between (exclusive) | falls between two dates, not including the endpoints | | is Empty | is null | | is NOT Empty | has any non-null value | **Comparison types** The dropdown between the operator and the value input controls what the column is compared against: | Type | Use case | | --- | --- | | **Value** | Compare against a fixed value you type in. Auto-suggestions appear based on actual column data. | | **Column Value** | Compare the selected column against another column in the same dataset. Useful for row-level comparisons (e.g. keep rows where `actual_sales` is greater than `target_sales`). | | **Parameter** | Compare against a project parameter. | **Case sensitive** A **Case sensitive** checkbox appears below the condition rows when at least one Text column condition is defined. When unchecked (default), comparisons like `is`, `contains`, and `starts with` are case-insensitive. Check it when exact casing matters. --- #### Multiple conditions (AND / OR logic) Click **Condition** to add a second condition row. ![Conditional Filter builder with the rule hotel_class is 5-Star and a WHERE clause preview](https://mammoth.io/docs/images/20260511_164722_numeric-operators1.webp) Once there are two or more conditions, an **And / Or** dropdown appears on the second row. Choose: - **And**—both conditions must be true for a row to pass. - **Or**—either condition being true is sufficient. When there is more than one condition, each condition row has icons on the right: | Icon | Action | | --- | --- | | Nest | **Place inside parentheses**—move this condition into a nested group | | Unnest | **Place outside parentheses**—move this condition out of its group (only inside a group) | | Copy | **Duplicate** this condition row | | Trash | **Remove** this condition row | **Grouping conditions** Click **Group** (available once there are two or more conditions) to create a nested condition group. Groups let you build compound logic such as *(A AND B) OR (C AND D)*—where the AND/OR inside the group is evaluated first, and the group result is then combined with the outer conditions. #### SQL mode If SQL mode is enabled for your workspace, switch to **SQL** to write a raw SQL WHERE expression. ![Conditional Filter SQL tab with an expression prompt, a Generate button and an empty SQL Expression editor](https://mammoth.io/docs/images/20260511_164826_sql-tab-view1.webp) The **SQL Expression** area accepts any valid SQL WHERE clause using your column names directly. The AI input bar at the top still works in SQL mode—clicking Generate populates the SQL Expression field rather than the visual builder. Use SQL mode when: - You need a complex expression that the Builder cannot represent. - You want to paste in a pre-written SQL condition. - You are migrating logic from another tool. #### Applying the filter Click **Apply** to run the task and add it to the pipeline. In Draft mode the button reads **Add to Pipeline** instead and stages the task without running it. #### Creating a Conditional Filter from an Explore Card You can also create a Conditional Filter directly from a column's Explore Card—select one or more values in the card and choose **Keep all values like this** or **Remove all values like this** from the card's context menu. The filter is pre-configured with those values. --- ### Remove Duplicate Rows Remove Duplicate Rows removes rows that are considered duplicates based on a scope you define. ![Remove Duplicate Rows panel with the Evaluate duplicates from menu open: All columns, All columns except, Only specific](https://mammoth.io/docs/images/20260417_123806_RemoveDuplicateRowsconfigurationpanelshowingthe1.webp) **Evaluate duplicates from:** - **All columns**—a row is a duplicate only if every single column value matches exactly. - **All columns, except**—a row is a duplicate if all columns match except the ones you exclude. Check the columns to exclude from the comparison. Use this when columns like timestamps or auto-generated IDs differ between otherwise identical records. - **Only specific columns**—a row is a duplicate if the columns you select match. ### Show Top/Bottom Rows Show Top/Bottom Rows keeps only a fixed number of rows from the top or bottom of your dataset. ![Show Top/Bottom Rows panel with 5 rows set to Top and a Sort added summary sorted by order_amount descending](https://mammoth.io/docs/images/20260421_092158_ShowTop_BottomRowsconfigurationpanelshowing1.webp) **How to configure:** - **Type amount of rows**—enter how many rows to keep. - **Select rows position**—choose **Top** for the first N rows or **Bottom** for the last N rows. If a sort is active, a **Sort added** chip appears showing which column the data is currently sorted by. This determines what "top" and "bottom" mean—for example, sorted by order_amount ascending, Top 10 gives the 10 lowest values. You can edit or remove the sort from the chip. ## Label & Edit ### Edit Cells Edit Cells lets you directly modify individual cell values in the data grid. ![View in Editing the grid mode, with a blue header bar offering Discard changes and Apply changes beside an Edit Cells task](https://mammoth.io/docs/images/20260417_123829_Viewin_Editingthegrid_modewiththeblueheaderbar1.webp) Selecting Edit Cells puts the View into **Editing the grid** mode—a blue bar appears at the top with **Discard changes** and **Apply changes** buttons. Double-click a cell to edit it directly. As you make changes, edited cells are highlighted. The task card in the pipeline panel shows a running list of all edits as Original → New pairs, each with an X to remove that specific change. When done, click **Apply changes** (or **Add to Pipeline** in Draft mode) to commit everything as a pipeline task, or **Discard changes** to cancel. Use Edit Cells for targeted, one-off corrections where a transformation rule would be unnecessary. ### Label & Insert Values Label & Insert Values inserts a value into rows—either every row, or only rows that meet a condition. ![Label & Insert Values panel with value 10 applied to Some cells, a condition on hotel_name, and result column Product_unit](https://mammoth.io/docs/images/20260511_165151_Screenshot2026-05-061639031.webp) **How to configure:** - **Enter a value**—type the value to insert. The input adapts to the column type you choose to write into. For a date column, choose a date option or pick a date and time. - **All cells / Some cells**—choose whether the value applies to every row or only to rows matching a condition. - Selecting **Some cells** reveals an **Add Condition** button. Clicking it opens a condition modal where you can describe the condition in natural language or build it manually with column and operator dropdowns. - Once set, a **Condition added** chip shows the active condition with edit and delete icons. - **Add another value**—insert a different value for other rows. Each earlier value needs a condition (**Some cells**); the last value then applies to **All remaining cells**. Drag values to reorder them. - **Place in new column**—the word **new** opens a menu: keep **New** to type a column name and choose its data type, or choose **Existing** to pick a column from the dropdown. ![Label & Insert Values panel with value 100 applied to Some cells under a condition, a second value for All remaining cells, Add another value, and a Place in new column field](https://mammoth.io/docs/images/20261009_120200_LabelInsertValues-TwoValues.webp) **Opening from an Explore Card:** Click the three-dot menu on any value bar in an Explore Card to see **Replace all values like this**—this opens Label & Insert Values with the selected value pre-filled as a condition, targeting only rows containing that value. ### Fill Missing Values Fill Missing Values fills empty cells in a column using values from neighboring rows. ![Fill Missing Values panel with a column selected, the Directional and Smart fill methods, Above and Below direction, and a before and after preview](https://mammoth.io/docs/images/20261009_132358_FillMissingValues-Directional.webp) **How to configure:** - **Select column**—choose the column with empty cells. - **Fill Method:** **Directional** copies the closest value above or below in the column. **Smart** predicts each empty cell from patterns in your complete rows, and appears only when the feature is enabled for your workspace. - **Direction** (Directional only): - **Above**—fills each empty cell with the nearest non-empty value above it. - **Below**—fills each empty cell with the nearest non-empty value below it. - The **Preview** panel shows how the selected method behaves before you apply it. - **Add Sort**—optionally define a sort order first, which controls what counts as "above" or "below." (Directional only.) - **Group by**—optionally restrict filling to within groups, so a value only fills from within the same group rather than across the entire dataset. (Directional only.) ## Replace ### Bulk Replace Bulk Replace replaces multiple values in a text column with standardized equivalents using AI-suggested groupings. ![Bulk Replace panel open showing the All Values tab with a list of unique values](https://mammoth.io/docs/images/20260417_124015_BulkReplacepanelopenshowingtheAllValuestabwithalistofuniquevalues1.webp) **How it works:** **Step 1—Choose groupings:** The panel has two tabs. **All Values** lists all unique values in the selected column with their row counts. **Group Suggestions** proposes groupings with suggested replacement names. Review the suggestions, adjust group names, move values between groups, and create additional groups if needed. The **Grouping Settings** menu lets you change how suggestions are generated (Smart, Spelling Match, Similarity, or Common Patterns). Use **Sort Alphabetically** or **Sort by Quantity** to order the values. Inside a group, **Add Dynamic Value** sets a rule (for example, contains, starts with or is Empty) so that matching values are added to that group. When satisfied, click **Next**. ![Bulk Replace Group Suggestions tab listing similar values with Add suggestion buttons, and a group of similar values](https://mammoth.io/docs/images/20260417_124041_Group-Suggestionscreen1.webp) **Step 2—Apply rule:** A summary step lets you choose where the result goes and add a condition if you want to apply the rule to specific rows. Click **Previous** to go back, or **Apply** to finish. ![Bulk Replace final step listing a group, with a Place in existing column control, a condition filter icon, and Cancel, Previous and Apply buttons](https://mammoth.io/docs/images/20261009_120001_BulkReplace-ApplyStep.webp) The result is a new column (or the existing column, depending on your choice) with all grouped values replaced by the standardized name you defined. Use Bulk Replace for company names, product categories, status codes, location labels—any column where the same concept appears in many different forms. ### Find & Replace Find & Replace searches for specific text values in selected columns and replaces them. ![Find & Replace configuration panel showing the multi-column selector](https://mammoth.io/docs/images/20260417_124150_FindReplaceconfigurationpanelshowingthemulti-columnselector1.webp) **How to configure:** - **Select columns**—choose one or more text columns to search within. - **Find value / Replace with**—enter the value to find and what to replace it with. - **Add Values**—add multiple find/replace pairs to handle several substitutions in a single task. - **Case sensitive**—when checked, only exact case matches are replaced. - **Entire cell**—when checked, only cells whose entire content matches are replaced. When unchecked, partial matches within a cell are also replaced. - **Add Condition**—optionally restrict the replacement to rows that meet a condition. Use Find & Replace for direct, known substitutions. Use Bulk Replace when you have many variations of the same value to consolidate. --- # Format guide—column type conversions URL: https://mammoth.io/docs/learn/transform/format-guide/ · Updated: 2026-11-02 Reference for Convert Column Type in Mammoth: date format codes, currency and percentage parsing, Unix timestamp units, and fixes for empty results. When you convert columns between TEXT, NUMERIC, and DATE types in Mammoth, format codes tell Mammoth how to interpret your data. This guide covers the formats Mammoth supports for each conversion type, with practical examples and troubleshooting tips. ## TEXT to DATE conversion When converting text values to dates, you can let Mammoth auto-detect the format or specify a custom format using PostgreSQL-style format codes. ### Auto-detection (recommended for standard formats) If you select **Source - Auto**, Mammoth samples the values in your column and detects the date formats present. Auto-detection works for most real-world data. If your dates are in an uncommon format or mixed formats, use custom format codes instead. ### Format codes reference Mammoth converts your text using these PostgreSQL-style format codes: | Code | Meaning | Example | Notes | | --- | --- | --- | --- | | **YYYY** | 4-digit year | 2025 | Use YY for 2-digit years (25) | | **MM** | Month (01-12) | 01 |—| | **DD** | Day of month (01-31) | 15 |—| | **HH24** | Hour (24-hour, 00-23) | 14 | Use HH12 or HH for 12-hour format (01-12) | | **MI** | Minute (00-59) | 30 |—| | **SS** | Second (00-59) | 45 |—| | **MON** / **MONTH** | Month name | Jan / January | MON = abbreviated, MONTH = full. The code can be written in upper, title, or lower case: MON, Mon, mon, MONTH, Month, month | | **DAY** / **DY** | Weekday name | Wednesday / Wed | DAY = full name, DY = 3-letter abbreviation. The code can be written in upper, title, or lower case | | **AM / PM** | AM/PM indicator | AM | The code can be written AM, am, PM, pm, A.M., a.m., P.M. or p.m. | | **TZ** | Timezone name | UTC | Timezone abbreviation (e.g., PST, EST, UTC) | | **OF** | Timezone offset | +00:00 | Format: ±HH:MM or ±HHMM | | **Literal "T"** | Literal T character | T | Use "T" to match literal T in ISO format (2025-01-15T14:30:00) | | **Literal "Z"** | Literal Z character | Z | Use "Z" to match ISO Zulu timezone indicator (2025-01-15T14:30:00Z) | ### Common format examples **ISO format (international standard)** ```plaintext Format code: YYYY-MM-DD Input: 2025-01-15 Output: January 15, 2025 ``` **ISO with time (ISO 8601)** ```plaintext Format code: YYYY-MM-DD"T"HH24:MI:SS"Z" Input: 2025-01-15T14:30:45Z Output: January 15, 2025 2:30:45 PM (UTC) ``` **US format (month/day/year)** ```plaintext Format code: MM/DD/YYYY Input: 01/15/2025 Output: January 15, 2025 ``` **UK format (day/month/year)** ```plaintext Format code: DD/MM/YYYY Input: 15/01/2025 Output: January 15, 2025 ``` **Long format with month name** ```plaintext Format code: DD MONTH YYYY Input: 15 January 2025 Output: January 15, 2025 ``` **European format (day.month.year)** ```plaintext Format code: DD.MM.YYYY Input: 15.01.2025 Output: January 15, 2025 ``` ### Handling ambiguous dates When your dates contain only numbers (e.g., 01/02/2025), Mammoth can't tell whether it's January 2nd (US) or February 1st (UK). Use these options: | Option | Interpretation | Use when | | --- | --- | --- | | **Source - Auto** | Detects formats from your data; may guess incorrectly | Your data is mostly unambiguous (has names or clear patterns) | | **Source - DD/MM/YYYY (Day First)** | 01/02/2025 = February 1st | You know dates are always DD/MM/YYYY | | **Source - MM/DD/YYYY (Month First)** | 01/02/2025 = January 2nd | You know dates are always MM/DD/YYYY | | **Source - Custom (multiple formats)** | You specify the format code | You have mixed formats or non-standard patterns | **Best practice:** If your data has ambiguous dates, always choose Day First or Month First explicitly rather than Auto. This prevents silent parsing errors. ### Multiple formats If your text column contains dates in different formats, you can specify multiple format codes separated by semicolons: ```plaintext Format: YYYY-MM-DD; MM/DD/YYYY; DD.MM.YYYY ``` Mammoth tries each format in order until one succeeds. This is useful for: - Imported data from multiple sources - Historical data where the format changed over time - Data entry that was inconsistent ## TEXT to NUMERIC conversion When converting text values to numbers, Mammoth extracts numeric values from formatted text and handles currency symbols, thousand separators, and percentages. ### Supported currency symbols Mammoth recognizes these 5 currency symbols when they appear **before** the number, and strips them during conversion: | Symbol | Currency | Example input | Parsed as | | --- | --- | --- | --- | | **$** | US Dollar | $1,234.56 | 1234.56 | | **€** | Euro | €1,234.56 | 1234.56 | | **£** | British Pound | £1,234.56 | 1234.56 | | **¥** | Japanese Yen / Chinese Yuan | ¥1234 | 1234 | | **₹** | Indian Rupee | ₹1,234.56 | 1234.56 | ### Thousand separator handling Mammoth removes comma thousand separators before converting. Both standard grouping (1,234,567) and Indian-style grouping (12,34,567) are accepted: | Format | Input | Parsed As | | --- | --- | --- | | Comma as thousand separator | 1,234,567.89 | 1234567.89 | | No separator | 1234567.89 | 1234567.89 | > **European format is not supported.** Numbers that use a period as the thousand separator and a comma as the decimal (e.g. `1.234.567,89`) are not recognized and will convert to a blank value. Use Find & Replace to convert the separators to the comma-thousands/period-decimal convention first (e.g. `1.234.567,89` → `1,234,567.89`), then convert to Numeric. ### Supported formats | Input type | Example | Output | | --- | --- | --- | | Plain number | 1234 | 1234 | | With decimals | 1234.56 | 1234.56 | | Currency prefix | $1,234.56 | 1234.56 | | Negative with currency | \-$1,234.56 | \-1234.56 | | Negative (leading) | \-1,234.56 | \-1234.56 | | Negative (after the symbol) | $-1,234.56 | \-1234.56 | | Percentage | 45% | 45 | | Leading/trailing spaces | " $1,234.56 " | 1234.56 | ### Precision limits Mammoth stores converted numbers with up to **8 decimal places** (NUMERIC(38,8)): - Input: 1234.56789012345 - Stored as: 1234.56789012 Numbers are rounded to 8 decimal places. ### Examples **Currency conversion** ```plaintext Input: $5,000.25 Output: 5000.25 ``` **Percentage parsing** ```plaintext Input: 25.5% Output: 25.5 ``` **European-style currency (not supported)** ```plaintext Input: €1.234,56 (period = thousand sep, comma = decimal) Output: (blank — this format is not recognized) ``` Convert the separators first (for example with Find & Replace) if your source data uses this convention. ## NUMERIC to DATE conversion When converting numbers to dates, Mammoth automatically detects the time unit (seconds, milliseconds, microseconds, or nanoseconds) based on the magnitude of the input value. ### Auto-detection logic Mammoth examines the numeric value and determines its unit: | Value range | Detected unit | Interpretation | Example input | Output | | --- | --- | --- | --- | --- | | \-62,135,596,800 to 253,402,300,799 | **Seconds** | Unix timestamp (standard) | 1735689600 | 2025-01-01 00:00:00 | | \-62,135,596,800,000 to 253,402,300,799,000 | **Milliseconds** | Divide by 1,000 | 1735689600000 | 2025-01-01 00:00:00 | | \-62,135,596,800,000,000 to 253,402,300,799,000,000 | **Microseconds** | Divide by 1,000,000 | 1735689600000000 | 2025-01-01 00:00:00 | | \-62,135,596,800,000,000,000 to 253,402,300,799,000,000,000 | **Nanoseconds** | Divide by 1,000,000,000 | 1735689600000000000 | 2025-01-01 00:00:00 | | Outside all ranges |—| **NULL** (invalid) | 99999999999999999999999 | (empty cell) | ### Why auto-detection? You don't need to specify the unit because Unix timestamps from different systems (JavaScript, Python, Java, etc.) use different units by default: - **JavaScript / milliseconds:** `Date.now()` returns 1735689600000 - **Python / seconds:** time.time() returns 1735689600 - **Java / milliseconds:** System.currentTimeMillis() returns 1735689600000 Mammoth figures out which one you have and converts correctly. ### Common examples **JavaScript timestamp (milliseconds)** ```plaintext Input: 1735689600000 Auto-detected as: Milliseconds Output: 2025-01-01 00:00:00 ``` **Unix timestamp (seconds)** ```plaintext Input: 1735689600 Auto-detected as: Seconds Output: 2025-01-01 00:00:00 ``` **Epoch boundary (zero)** ```plaintext Input: 0 Auto-detected as: Seconds Output: 1970-01-01 00:00:00 (Unix epoch start) ``` **Negative timestamp (before 1970)** ```plaintext Input: -86400 Auto-detected as: Seconds Output: 1969-12-31 00:00:00 (One day before epoch) ``` --- ## Common conversion errors and troubleshooting When a conversion fails, the cell becomes empty (NULL). Here's how to diagnose and fix issues: ### TEXT to DATE issues | Problem | Cause | Fix | | --- | --- | --- | | All cells become empty | Format code doesn't match your data | Check the actual date format in your source data. Try Auto-detection first. | | Some cells are empty | Some values don't match the format | Check for typos, extra spaces, or inconsistent formatting in those rows. | | "01/02/2025" parses wrong | Ambiguous date format (US vs UK) | Explicitly choose "Day First" or "Month First" instead of Auto. | | Extra text after date (e.g., "2025-01-15 extra text") | Format string doesn't account for trailing content | The format only needs to match the date portion. Extra characters are ignored. | | "2025-01-15 14:30:00" doesn't parse | Missing time portion in format | Use `YYYY-MM-DD HH24:MI:SS` to include time. | **Debug tip:** Duplicate your column and try converting it with Auto-detection first. If that fails, the data itself may have issues (typos, inconsistent formats, or truly invalid dates). ### TEXT to NUMERIC issues | Problem | Cause | Fix | | --- | --- | --- | | All cells become empty | No numeric values found in text | Check that your text actually contains numbers, not just words. | | Some cells are empty | Unsupported currency or format | Mammoth only supports €$¥£₹. Other symbols aren't recognized. | | "1,234.56€" fails | Currency symbol after the number | Move the symbol in front of the number: "€1,234.56". Only a leading symbol is recognized. | | "1.234,56" fails | European format (period = thousand separator) | Mammoth only recognizes comma as the thousand separator. Use Find & Replace to convert the value to comma-thousands/period-decimal format first (e.g. "1.234,56" → "1,234.56"), then convert to Numeric. | | "25%" outputs 25 | Percentage sign is stripped | The % is removed; you get the number. Format as percentage in the output if needed. | ### NUMERIC to DATE issues | Problem | Cause | Fix | | --- | --- | --- | | All cells become empty | Values outside valid timestamp range | Check your numbers. Valid range: -62,135,596,800 to 253,402,300,799 seconds. | | Date is in 1970 when it should be 2025 | Unit auto-detection chose wrong unit | Your number might be in seconds when system expects milliseconds. Check the source system's convention. | | Very old or future dates | Timestamp interpreted as different unit | Verify the input is actually a Unix timestamp. Non-timestamp numbers will parse incorrectly. | ## Best practices 1. **Test with a sample first.** Before converting an entire column, test your format code on a few rows to confirm it works. 2. **Use Auto-detection when possible.** For standard date formats (ISO, US, UK), let Mammoth detect the format. Specify a custom format only if Auto fails. 3. **Be explicit with ambiguous dates.** Don't use Auto for DD/MM/YYYY vs MM/DD/YYYY ambiguity—explicitly choose one. 4. **Preserve originals.** Copy a column before converting it, so you can compare the original and converted values if something goes wrong. 5. **Check edge cases.** After converting, spot-check a few values: - First few rows - Last few rows - Any that had conversion errors (empty cells) 6. **Currency and locale matter.** TEXT-to-NUMERIC assumes a comma is the thousand separator and a period is the decimal point. If your data uses other symbols or conventions, you may need to clean it first. ## Related articles - [Convert Column Type](https://mammoth.io/docs/learn/transform/column-management/#convert-column-type) - [Column Menu](https://mammoth.io/docs/learn/transform/column-menu/) - [Column Management](https://mammoth.io/docs/learn/transform/column-management/) --- # Function reference URL: https://mammoth.io/docs/learn/transform/function-reference/ · Updated: 2026-11-02 Every Mammoth Transform menu function by category, with a one-line description of each and links to the full documentation page for that category. A complete list of all transformation functions available in Mammoth, organized by category. Click any category name to go to its full documentation page. Copy Columns, Generative AI, Data Check and Checkpoint Alert appear only when the feature is enabled for your workspace. ## AI Powered The AI Powered section of the Transform menu shows five shortcuts to commonly used AI-assisted functions. Three of them—Extract Text, Bulk Replace, and Conditional Filter—live in their primary categories and are fully documented there. The two functions below are AI-native and available only from this section. ![Task picker with the AI Powered category open, showing AI SQL Query, Generative AI, Extract Text, Bulk Replace and Conditional Filter, and the Describe your transformation search box](https://mammoth.io/docs/images/20261009_132708_TaskPicker-AIPowered.webp) ### AI SQL Query AI SQL Query converts a natural language description into a SQL query and runs it directly on your data. Type what you want—for example, "total revenue by region for orders placed this year"—and Mammoth generates and executes the appropriate query, returning the result as a new View state. Use this for complex analysis that would normally require writing SQL: multi-column aggregations, conditional logic across many fields, or any calculation that is easier to describe in plain language than to build step by step using individual function tasks. ### Generative AI Generative AI uses a large language model to generate new column values based on context you provide. You describe what you want to create—for example, classify a product description as one of three categories, or generate a plain-language summary of a transaction record—and Mammoth creates a new column populated with AI-generated values for every row. Use this for enrichment tasks that require reasoning: sentiment classification, category assignment from free text, language translation, or any case where the output depends on understanding meaning rather than applying a fixed rule. ### Extract Text, Bulk Replace, Conditional Filter These three functions appear here as shortcuts and are fully documented on their respective category pages: - **Extract Text**—[Date, Numeric & Text → Text Tools](https://mammoth.io/docs/learn/transform/date-numeric-text/) - **Bulk Replace**—[Filter, Label & Replace → Replace](https://mammoth.io/docs/learn/transform/filter-label-replace/) - **Conditional Filter**—[Filter, Label & Replace → Filter](https://mammoth.io/docs/learn/transform/filter-label-replace/) ## [Filter, Label & Replace](https://mammoth.io/docs/learn/transform/filter-label-replace/) The Filter, Label & Replace category has eight functions for filtering rows, editing and labeling cells, and replacing values. ![Animation of the Transform menu on Filter, Label & Replace, listing Conditional Filter, Remove Duplicate Rows and more](https://mammoth.io/docs/images/20260420_161157_FilterLabelReplacecategory.webp) **Filter** | Function | What it does | | --- | --- | | Conditional Filter | Show only the rows that match specific conditions | | Remove Duplicate Rows | Delete rows with duplicate values (customizable by column) | | Show Top/Bottom Rows | Display a fixed number of top or bottom rows in your data | **Label & Edit** | Function | What it does | | --- | --- | | Edit Cells | Modify cells directly in the table | | Label & Insert Values | Assign new labels to cells based on a custom condition | | Fill Missing Values | Fill empty cells using nearby or computed values | **Replace** | Function | What it does | | --- | --- | | Bulk Replace | Replace multiple values with AI-suggestions | | Find & Replace | Search and replace specific values in selected columns | ## [Date, Numeric & Text](https://mammoth.io/docs/learn/transform/date-numeric-text/) The Date, Numeric & Text category has nine functions grouped as date tools, numeric tools, and text tools. ![Animation of the Transform menu on Date, Numeric & Text, listing date tools, numeric tools and more](https://mammoth.io/docs/images/20260420_161717_Datenumeric.webp) **Date Tools** | Function | What it does | | --- | --- | | Add / Subtract Date Values | Shift date values by a specific number of days, weeks, etc. | | Extract Date Part | Pull out day, month, or year from a date column | | Calculate Date Difference | Find the time difference between two date columns | **Numeric Tools** | Function | What it does | | --- | --- | | Math Function | Apply basic math formulas (like sum, multiply) to your data | | Window Function | Run numerical functions across groups of data | | Obtain Large or Small Values | Find the Nth highest or lowest value by comparing numbers across columns | **Text Tools** | Function | What it does | | --- | --- | | Extract Text | Pull specific text patterns from a column using AI | | Text Formatting | Tidy up text by changing case or removing extra spaces | | Extract JSON | Extract data in JSON format into separate columns | ## [Reshape, Group & Pivot](https://mammoth.io/docs/learn/transform/reshape-group-pivot/) The Reshape, Group & Pivot category has two functions for summarizing data by group and converting wide data to long format. ![Transform menu on Reshape, Group & Pivot, listing Group & Pivot and Unpivot](https://mammoth.io/docs/images/20260417_115233_ReshapeGroupPivotcategoryopenshowingGroup1.webp) | Function | What it does | | --- | --- | | Group & Pivot | Group data by categories and calculate statistics | | Unpivot | Transform columns into rows (convert wide format to long format for analysis) | ## [Column Management](https://mammoth.io/docs/learn/transform/column-management/) The Column Management category has six functions for adding, copying, combining, converting, removing, and splitting columns. ![Column Management category open showing all 6 functions](https://mammoth.io/docs/images/20260417_115315_ColumnManagementcategoryopenshowingall6functions1.webp) | Function | What it does | | --- | --- | | Add Column | Add a new empty column to your View | | Copy Columns | Add a copy of existing column(s) to the View | | Combine Columns & Text | Combine data from multiple columns into a single new column | | Convert Column Type | Change how a column's values are displayed—as text, numbers, or date | | Remove Column | Delete one or more selected columns from your View | | Split Into Multiple Columns | Divide the contents of a column into multiple new columns | ## [Unify](https://mammoth.io/docs/learn/transform/unify/) The Unify category has three functions for combining data from other Views and sending results to a dataset. ![Unify category open showing Send to Dataset, Join, and Lookup](https://mammoth.io/docs/images/20260417_115332_UnifycategoryopenshowingSendtoDatasetJoinandLookup1.webp) | Function | What it does | | --- | --- | | Send to Dataset | Send processed data from the current View to a new or existing dataset | | Join | Combine data from another View using one or more common key columns | | Lookup | Bring data from another View into the current View based on a key column | ## [Controls](https://mammoth.io/docs/learn/transform/controls/) The Controls category has two functions that check pipeline output and gate it on approval. ![Controls category open showing Data Check and Checkpoint](https://mammoth.io/docs/images/20260417_115350_ControlscategoryopenshowingDataCheckandCheckpoint1.webp) | Function | What it does | | --- | --- | | Data Check | Run automated data quality checks on the pipeline output | | Checkpoint Alert | Notify people or systems, with the option to require approval to continue | ## Find a function by keyword Use the search bar at the top of the Transform menu. Its placeholder reads "Describe your transformation". Type a keyword, and matching functions from all categories are listed. --- # Generative AI URL: https://mammoth.io/docs/learn/transform/generative-ai/ · Updated: 2026-11-02 Use Generative AI in Mammoth to classify, enrich, translate or summarize rows with a plain-English prompt and your own AI provider key, saved as a task. Generative AI is a Transform function that lets you describe what you want in plain English and have an AI model write the values for you, directly in your dataset. Use it to classify, enrich, summarize, translate, reformat, or generate new content from your existing columns, without leaving the Data Editor. The results are added as a column and saved as a reusable pipeline task, so they re-run automatically whenever your data refreshes. ## Before you start Generative AI uses your own AI provider API key. A Workspace Owner must add at least one external key in [Workspace Settings → API Keys](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#external-api-keys) before anyone on the workspace can use this feature. Supported providers are **OpenAI (ChatGPT)**, **Anthropic (Claude)**, **Google (Gemini)** and **xAI (Grok)**. For setup steps, see [Adding an external API key](#adding-an-external-api-key). ## Open Generative AI 1. Open a View in the Data Editor. 2. Click the blue **+** button (tooltip "Add a task") in the action bar, or a **+** button in the Pipeline panel. 3. The Transform menu opens on the **AI Powered** category. 4. Click **Generative AI**. The Generative AI panel opens at the bottom of the View. ![Transform menu open on AI Powered, listing AI SQL Query, Generative AI, Extract Text, Bulk Replace and Conditional Filter](https://mammoth.io/docs/images/20260605_093209_transform-picker1.webp) ## Generative AI panel ![Generative AI panel with an empty prompt box, a column selector, an API key picker showing a Gemini key, and a Preview button](https://mammoth.io/docs/images/20260605_093345_genai-panel-main1.webp) | Element | Description | | --- | --- | | **Prompt textarea** | Describe the content you want to generate in plain English | | **Constraint note** | Reminder: "Max 300 chars per cell, applies only to the first 50,000 rows." | | **Column selector** | Chooses which existing columns to pass as context to the AI model (auto or manual) | | **API key selector** | Selects which saved external key (and AI provider) to use | | **Preview** | Generates a sample without writing to the dataset—active once prompt and key are set | | **Apply results into** | Sets the destination column name and whether to create a new column or write into an existing one | | **Apply** | Runs generation on the full dataset and adds the pipeline task | ## Write a prompt Type your instruction in the **prompt textarea**. Be specific about what you want and what the output should look like. Example prompts: | Goal | Example prompt | | --- | --- | | Classify | `Based on the Ship to Country, classify the shipping destination as Europe, UK, or Other` | | Categorize | `Categorize the product description into one of: Electronics, Apparel, Home, Food` | | Enrich | `Generate a short 1-sentence description of this product based on its name and category` | | Translate | `Translate the customer comment from Spanish to English` | | Normalize | `Standardize the company name—remove Inc, Ltd, LLC suffixes and trim whitespace` | | Score | `Rate the sentiment of this review as Positive, Neutral, or Negative` | Each generated value must be 300 characters or fewer; if the model returns longer values, the run fails with an error. ## Select context columns The column selector controls which columns from your dataset are passed to the AI model alongside each prompt. The model uses these columns as context when generating values. **Auto select columns for evaluation**—Mammoth automatically identifies the columns most relevant to your prompt. For most prompts this works well; Mammoth picks up column names that match your intent (e.g., if your prompt mentions "Ship to Country", that column is auto-selected). **Manually select columns for evaluation**—Switch the column selector to manual selection to pick specific columns yourself. Evaluating more columns increases processing time. Use this when: - Auto-selection picks up irrelevant columns that could confuse the model - You want to limit context to keep generations consistent - You have columns with similar names and need to be precise Up to 20 columns can be selected as context. ## Select an API key Click the **API key selector** to see all external keys saved in your workspace, grouped by provider. Each key shows: - Provider logo and name - Key display name ![API key dropdown open in the Generative AI panel, listing an Anthropic key](https://mammoth.io/docs/images/20260605_093555_key-dropdown-all-keys1.webp) Select a key to use it. If the selected key has a problem such as a rate limit, a banner appears at the top of the panel. If no keys are saved in the workspace, a banner appears with a link to add one. ## Preview results Before applying to your full dataset, click **Preview** to generate a sample of 10 rows. Preview: - Calls the AI provider with your prompt and context columns - Returns sample output in a preview table with a **Generated column** - Does not modify your dataset or count as an applied task ![Generative AI panel with a prompt to classify shipping destination and a preview column of Europe and UK values](https://mammoth.io/docs/images/20260605_093734_genai-preview-results1.webp) Use preview to verify the output matches your expectation before committing to the full dataset. ## Configure output Below the key selector, **Apply results into** controls where results are written. - **New Column** (default)—Creates a new column. Type a name in the text field next to it. The Apply button stays disabled until you enter a column name. - **Existing Column**—Overwrites the values in an existing column. A dropdown appears to select the target column. ## Apply Once your prompt is entered, a key is selected, and a column name is set, the **Apply** button becomes active. Click **Apply** to run generation on the full dataset. Generation time depends on the number of rows, the provider, and the model. After apply: - The new column appears in the dataset grid - A **Generative AI** task card is added to the Pipeline panel ![Pipeline panel with a Generative AI task showing its prompt and new column, and the data grid updated](https://mammoth.io/docs/images/20260605_094207_genai-apply-complete1.webp) ## Limits and constraints | Constraint | Value | | --- | --- | | Max output per cell | 300 characters | | Max rows processed | 50,000 | | Max context columns | 20 | See [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/) for all Generative AI limits. Rows beyond 50,000 are not processed—the task applies only to the first 50,000 rows of your View. ## Troubleshooting ### Rate limit exceeded A banner appears when the selected key has hit its rate limit with the AI provider: > "Your Google Gemini key has exceeded its rate limit. Please try again in a few minutes." **Options:** 1. Wait a few minutes for the rate limit window to reset 2. Switch to a different key from the same or a different provider using the key selector ### No API key configured A banner prompts you to add an API key. Use the link in the banner to open the Add External API Key modal directly. ### Key validation failed If a key fails validation, Mammoth shows a message such as "The Claude key is invalid." Check the key and try again. Ensure you are pasting the key for the correct provider—keys are provider-specific and will fail if used with the wrong service. ### Insufficient quota The provider account has no remaining balance, and Mammoth shows a message to that effect. Add funds in the provider's dashboard, or add a key from a different account. ## How it works When you click Apply, Mammoth: 1. Takes your prompt and the selected context columns 2. Sends rows to the AI provider using your external API key 3. Writes the returned values into the output column The task is saved in your pipeline and re-runs automatically on future dataset refreshes or when the pipeline is re-executed. ## Adding an external API key External API keys are managed in **Workspace Settings → API Keys** (Workspace Owner role required). Keys are workspace-scoped—all members of the workspace can use them for AI features. ### Step 1—Open Workspace Settings Open Workspace Settings and select **API Keys**. The **External API keys** card lists all saved keys by name, with the person who added each one and the date it was added. Open a row's menu to see the key's last four characters. ![Add External API Key dialog in Workspace Settings, with provider choices ChatGPT, Claude, Grok and Gemini](https://mammoth.io/docs/images/20260605_094308_add-external-key-modal1.webp) ### Step 2—Choose a provider Click **Add external key**. The **Add External API Key** modal opens. Choose the AI service you want to connect: - **ChatGPT**—OpenAI - **Claude**—Anthropic - **Grok**—xAI - **Gemini**—Google Click a provider card to select it, then click **Next**. ### Step 3—Configure and paste your key | Field | Description | | --- | --- | | **Model dropdown** | Select which model this key will use | | **Preferences** | Expand to configure model-specific capabilities (see below). Shown only for models that support them | | **Key Name** | Display label for this key—the placeholder shows the model name | | **Paste API key** | Field for your API key. A "How to get your [Provider] key" link opens the provider's API key documentation | Click **Add External Key**. Mammoth validates the key on submission. ### Model preferences Click **Preferences** to expand model-specific options. Which toggles appear depends on the selected model: ![Add External API Key dialog for Claude, with a model dropdown, Extended thinking, Web search and Batch API toggles](https://mammoth.io/docs/images/20260605_094521_add-key-preferences1.webp) | Preference | What it does | | --- | --- | | **Extended thinking** | Enables an extended reasoning mode—the model spends more time reasoning before responding. Uses more tokens | | **Reasoning effort** | Controls how much reasoning the model applies, for models that support it | | **Web search** | Allows the model to search the web for up-to-date information | | **Batch API** | Routes requests through the provider's Batch API. Results may be slower | These preferences apply to all Generative AI operations using this key. ### Key management | Action | How | | --- | --- | | **Remove** | Open the row's menu and select Remove. Removes the key permanently; any pipeline tasks using it will fail until a new key is selected | > Info: Key values are write-only\ > Once saved, the key value is shown masked and cannot be changed. To replace a compromised or expired key, remove it and add a new one. ### Supported providers and models | Provider | Display name | Key format | | --- | --- | --- | | OpenAI | ChatGPT | `sk-proj-...` | | Anthropic | Claude | `sk-ant-api03-...` | | xAI | Grok | `xai-...` | | Google | Gemini | `AIza...` | The models you can choose from are listed in the model dropdown when you add a key. Multiple keys per provider are supported. For example, you can add two Gemini keys—one for production use and one for testing—and switch between them in the key selector. --- # Grid operations URL: https://mammoth.io/docs/learn/transform/grid-operations/ · Updated: 2026-11-02 Use the multi-column menu in the Mammoth data grid to hide, show or remove several selected columns at once, or run Find & Replace across text columns. The multi-column menu applies one operation to several columns at once. It is for anyone who needs to hide, show, remove, or find and replace across a selection. When you select two or more column headers in the data grid, a **multi-column menu** appears. This is separate from the per-column menu—it provides bulk operations that act on your entire selection at once. --- ## Open the multi-column menu 1. Click the first column header to select it 2. Hold **Ctrl** (Windows) or **Cmd** (Mac) and click additional column headers, or hold **Shift** and click another header to select the whole range between them 3. A 3-dot menu button appears on any of the selected column headers 4. Click the 3-dot button to open the multi-column menu The menu is disabled while the pipeline is loading or applying changes. Wait for processing to complete. The three visibility options are also disabled while the pipeline has a task in error. The menu's actions do nothing in preview mode. --- ## Menu options The multi-column menu shows five operations, organized into two groups. ### Visibility | Operation | What it does | | --- | --- | | **Hide** | Hides all selected columns from the current View, in addition to any columns that are already hidden. Data is preserved—the columns just become invisible. | | **Hide only these** | Hides the selected columns and shows every other column. Columns hidden earlier are shown again. | | **Show only these** | Shows only the selected columns and hides everything else. | These visibility changes are Display Changes on this View—they do not affect other Views or delete any data. You can review or revert them in the Display Changes modal. --- ### Data pipeline The following operations appear under a **Data Pipeline** section label. They open a Functions Panel and add a task to the pipeline when applied. | Operation | What it does | | --- | --- | | **Remove** | Opens Remove Column with all selected columns, and adds a task that removes them from this View. | | **Find & Replace** | Opens Find & Replace with all selected TEXT columns pre-selected, and with the View's current filter as its condition. Disabled if no TEXT column is in the selection. | **Note:** Remove is a pipeline task, so later tasks cannot use the removed columns. To bring the columns back, suspend or delete the Remove Column task. Use Hide if you only want to clear columns from the grid. --- ## Menu behavior by selection type The five menu items are always present, but **Find & Replace** is enabled or disabled depending on whether any TEXT column is in your selection. All other options (Hide, Hide only these, Show only these, Remove) are active regardless of which types you select. | Selection | Hide | Hide only these | Show only these | Remove | Find & Replace | | --- | --- | --- | --- | --- | --- | | Only TEXT columns | Active | Active | Active | Active | **Active** | | Only NUMERIC columns | Active | Active | Active | Active | Disabled | | Only DATE columns | Active | Active | Active | Active | Disabled | | TEXT + NUMERIC | Active | Active | Active | Active | **Active** | | TEXT + DATE | Active | Active | Active | Active | **Active** | | NUMERIC + DATE | Active | Active | Active | Active | Disabled | | TEXT + NUMERIC + DATE | Active | Active | Active | Active | **Active** | **Rule:** Find & Replace is active whenever **at least one TEXT column** is in your selection. The column types of the non-TEXT columns in your selection do not affect it. --- ## Visibility persistence | Operation | Persists after refresh? | | --- | --- | | Hide | Yes—saved with the View as a Display Change | | Hide only these | Yes—saved with the View as a Display Change | | Show only these | Yes—saved with the View as a Display Change | To review or revert hidden columns, open **Display Changes** or use the Column Browser. --- ## Other grid interactions - **Select rows:** click a row number in the first column. **Ctrl** or **Cmd** adds or removes a row, and **Shift** selects a range. Clicking any cell clears the row and column selection. - **Copy and paste:** right-click a cell to get **Copy**, **Copy with Headers**, **Paste** and **Cut**. When you paste into a NUMERIC column, a value that is not a valid number becomes empty. - **Rename a column:** double-click the column name in the header, or use **Rename Column** in the [column menu](https://mammoth.io/docs/learn/transform/column-menu/). Renaming is disabled while a pipeline task is in error. - **Resize a column:** drag the right edge of the header. The width is saved with the View. - **Sort and freeze:** use the column menu. See [Sort your data](https://mammoth.io/docs/learn/transform/column-menu/#sort-your-data) and [Freeze a column](https://mammoth.io/docs/learn/transform/column-menu/#freeze-a-column). - **Edit cells:** once cell editing is enabled for the dataset, double-click a cell to edit it. Edits are listed as an **Edit Cells** task in the pipeline. --- ## Common questions **Q: Can I use the multi-column menu with just one column selected?**\ A: No—the multi-column menu only appears when two or more columns are selected. **Q: What happens to hidden columns after I refresh the page?**\ A: They stay hidden. Visibility changes (Hide, Hide only these, Show only these) are saved with the View as Display Changes. To unhide columns, use the Column Browser or revert them in Display Changes. **Q: Find & Replace is disabled. Why?**\ A: None of the selected columns are TEXT type. Include at least one TEXT column in your selection to enable Find & Replace. **Q: I removed the wrong columns. Can I undo this?**\ A: Yes. Remove adds a Remove Column task to the pipeline. Suspend or delete that task to bring the columns back. **Q: Can I mix column types in a multi-column selection?**\ A: Yes. You can select any combination of TEXT, NUMERIC, and DATE columns. The only operation affected by type is Find & Replace, which only applies to the TEXT columns in your selection. --- ## See also - [**Column Menu**](https://mammoth.io/docs/learn/transform/column-menu/)—Per-column formatting, sorting, and transformation options - [**Column Browser**](https://mammoth.io/docs/learn/explore-discover/column-browser/)—Manage all columns at once (hide/show, reorder) - [**Transform and pipeline**](https://mammoth.io/docs/learn/transform/)—Pipeline tasks and data transformation --- # Transform and pipeline URL: https://mammoth.io/docs/learn/transform/ · Updated: 2026-11-02 Build a Mammoth pipeline: an ordered list of tasks that clean, reshape and combine data in a View and re-run on every refresh. Includes the Transform menu. Transforming data in Mammoth means building a pipeline: an ordered sequence of tasks that clean, reshape, calculate, and combine your data. You build it visually inside a View. Build it once and it re-runs every time the dataset refreshes, whether from a schedule, a file upload event, or a manual refresh. This section is for analysts and operations teams who prepare data in Mammoth. If you are new, start with [Understanding the pipeline](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/), then follow [Your first pipeline](https://mammoth.io/docs/learn/getting-started/first-pipeline/). You open the pipeline builder from the **Pipeline** panel inside any View. ![Pipeline panel with a Source card, a Convert Column Type task and a New task will be inserted here marker](https://mammoth.io/docs/images/20260417_092613_Pipelinepanelshowingthe_Newtaskwillbeinsertedhere1.webp) ## How pipelines work A pipeline is a sequential list of transformation tasks. Each task is a discrete, reversible operation applied to the rows in your View. Tasks run in order from top to bottom, and the output of task N is the input to task N+1. The first item in the Pipeline panel is always **Source**, which represents the raw data coming in. The Source card appears automatically as soon as you add your first task to a fresh View. ```plaintext RAW DATA ↓ [Task 1: Remove Duplicate Rows] ↓ [Task 2: Conditional Filter — keep rows where Status = "Active"] ↓ [Task 3: Edit Cells — standardize Region column values] ↓ [Task 4: Join — merge with budget data from another dataset] ↓ CLEAN OUTPUT ``` Because tasks are stored as instructions (not data copies), you can reorder, edit, or delete any task without losing your source data. To add, edit, reorder, suspend, and copy tasks, see [Understanding the pipeline](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/). ## Open the Transform menu Open any View and click the **Describe your transformation** box in the action bar, or the blue **+** button (tooltip "Add a task"). The Transform menu opens with a search bar that reads "Describe your transformation" and a left navigation panel with seven categories. It opens on **AI Powered** by default, which shows five commonly used functions as shortcuts. The same functions are also available in their primary categories—AI Powered is a quick-access panel, not a separate set of exclusive functions. ![Task picker with the Describe your transformation search box and seven categories on the left: AI Powered, Filter, Label & Replace, Date, Numeric & Text, Reshape, Group & Pivot, Column Management, Unify and Controls](https://mammoth.io/docs/images/20261009_132708_TaskPicker-AIPowered.webp) ## Types of operations Mammoth provides 30+ transformation operations across seven categories. The Transform menu lists them in the same order: | Category | Operations | | --- | --- | | **AI Powered** | AI SQL Query, Generative AI, plus shortcuts to Extract Text, Bulk Replace, and Conditional Filter | | **Filter, Label & Replace** | Conditional Filter, Remove Duplicate Rows, Show Top/Bottom Rows, Edit Cells, Label & Insert Values, Fill Missing Values, Bulk Replace, Find & Replace | | **Date, Numeric & Text** | Add/Subtract Date Values, Extract Date Part, Calculate Date Difference, Math Function, Window Function, Obtain Large or Small Values, Extract Text, Text Formatting, Extract JSON | | **Reshape, Group & Pivot** | Group & Pivot, Unpivot | | **Column Management** | Add Column, Copy Columns, Combine Columns & Text, Convert Column Type, Remove Column, Split Into Multiple Columns | | **Unify** | Join (inner, left, right, outer), Lookup, Send to Dataset | | **Controls** | Data Check, Checkpoint Alert | See the [Function reference](https://mammoth.io/docs/learn/transform/function-reference/) for the complete list with descriptions, or go straight to a category: - [Filter, Label & Replace](https://mammoth.io/docs/learn/transform/filter-label-replace/) - [Date, Numeric & Text](https://mammoth.io/docs/learn/transform/date-numeric-text/) - [Reshape, Group & Pivot](https://mammoth.io/docs/learn/transform/reshape-group-pivot/) - [Column Management](https://mammoth.io/docs/learn/transform/column-management/) - [Unify](https://mammoth.io/docs/learn/transform/unify/) - [Controls](https://mammoth.io/docs/learn/transform/controls/) ## AI-powered transformations Several functions let you describe what you want in plain English and have Mammoth generate the transformation for you: - **Generative AI**—writes new column values using a large language model (classification, enrichment, translation, summarization). - **AI SQL Query**—converts a plain-language request into a SQL query and runs it against your data. - **Conditional Filter** and **Extract Text** also include an AI-assisted generation bar—describe the rule and Mammoth builds it for you. **Bulk Replace** uses AI to suggest groupings of similar values. Examples: - "Remove all rows where the customer name contains a test email address" (Conditional Filter) - "Extract the numeric dollar value from the Notes column" (Extract Text) - "Classify this product description as Electronics, Apparel, Home, or Food" (Generative AI) AI-generated logic produces the same reusable, auditable pipeline tasks as manual operations—you can inspect, edit, or override it before applying. For details, see [Generative AI](https://mammoth.io/docs/learn/transform/generative-ai/) and [AI SQL Query](https://mammoth.io/docs/learn/transform/ai-sql-query/). ## Display changes vs pipeline tasks There are two separate ways to modify a View, and it helps to understand both before you build your first pipeline. **Display Changes** affect how data looks in your View—column names, column order, visibility, sorting, and number or date formatting. You make them from a column's 3-dot menu or by dragging columns. They do not transform the underlying data, and they are specific to the View you're working in. **Pipeline Tasks** actually transform the data—filtering rows, calculating values, joining tables, cleaning text. They run automatically every time new data flows through the View. There is no "Rename Column" pipeline task in Mammoth. To rename a column, double-click its header or open its 3-dot menu and select **Rename Column**. This creates a Display Change, and the new name appears in pipeline task dropdowns and exports. See [Rename, format, and sort columns](https://mammoth.io/docs/learn/transform/rename-format-and-sort-columns/) for the full explanation. ## Draft mode vs immediate execution When you add a pipeline task, you can choose how it applies to your data: | Mode | Behavior | Best for | | --- | --- | --- | | **Immediate** | The task applies and the data grid updates instantly | Single tasks, small datasets, quick exploration | | **Draft mode** | Tasks are queued and applied as a batch when you click **Apply now** | Testing logic with many tasks, large datasets | Turn Draft mode on from the pipeline's **More Pipeline options (...)** menu. Pending changes are listed in the Review modal until you apply the batch. See [Draft mode](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/#draft-mode) for the full workflow. ## Pipeline management Once a pipeline is built, it runs automatically each time the underlying dataset refreshes—whether triggered by a schedule, a file upload event, or a manual refresh. You can: - **Reorder tasks** by dragging - **Suspend and restore** individual tasks without deleting them - **Duplicate** a task for minor variations - **Copy a pipeline** from one View to another ## Working with multiple datasets To combine data from two or more datasets, use a **Join** or **Lookup** task: - **Join**—merges two Views by matching rows on a common key column. Supports inner, left, right, and outer joins. - **Lookup**—fetches a value from another dataset based on a key, like VLOOKUP in Excel. - **Send to Dataset**—routes the output of this pipeline into a new or existing dataset for downstream analysis. ## Performance tips - Apply **filter tasks early** in the pipeline to reduce the row count before expensive operations like joins and pivots. - For large datasets, use **Draft mode** to batch test changes before applying. - Use an **Automation** to keep source datasets current automatically rather than re-uploading manually. For more, see [Performance](https://mammoth.io/docs/learn/performance/) and [Automations](https://mammoth.io/docs/learn/automations/). ## In this section - [Understanding the pipeline](https://mammoth.io/docs/learn/transform/understanding-the-pipeline/): add, edit, suspend, reorder and copy tasks, and use Draft mode. - [Rename, format, and sort columns](https://mammoth.io/docs/learn/transform/rename-format-and-sort-columns/): Display Changes versus pipeline tasks. - [Function reference](https://mammoth.io/docs/learn/transform/function-reference/): every Transform function with a short description. - [Filter, Label & Replace](https://mammoth.io/docs/learn/transform/filter-label-replace/): filter rows, edit cells, fill missing values, find and replace. - [Date, Numeric & Text](https://mammoth.io/docs/learn/transform/date-numeric-text/): date math, calculations, window functions and text extraction. - [Reshape, Group & Pivot](https://mammoth.io/docs/learn/transform/reshape-group-pivot/): summarize with Group & Pivot and reshape with Unpivot. - [Column Management](https://mammoth.io/docs/learn/transform/column-management/): add, copy, combine, split, convert and remove columns. - [Unify](https://mammoth.io/docs/learn/transform/unify/): Join, Lookup and Send to Dataset. - [Pipeline Controls](https://mammoth.io/docs/learn/transform/controls/): Data Check and Checkpoint quality gates. - [Conditional Highlights](https://mammoth.io/docs/learn/transform/conditional-highlights/): color cells or rows by rule without changing data. - [AI SQL Query](https://mammoth.io/docs/learn/transform/ai-sql-query/): turn a plain-English request into SQL. - [Generative AI](https://mammoth.io/docs/learn/transform/generative-ai/): classify, enrich or translate values with your own AI key. - [Pipeline health and error states](https://mammoth.io/docs/learn/transform/pipeline-health-and-error-state/): diagnose and fix failing tasks. - [Column Menu](https://mammoth.io/docs/learn/transform/column-menu/): format, sort, freeze, rename and hide from a column header. - [Grid Operations](https://mammoth.io/docs/learn/transform/grid-operations/): act on several selected columns at once. - [Format guide](https://mammoth.io/docs/learn/transform/format-guide/): format codes for Convert Column Type. --- # Pipeline health and error states URL: https://mammoth.io/docs/learn/transform/pipeline-health-and-error-state/ · Updated: 2026-11-02 Why a Mammoth pipeline task fails, how errors appear on task cards, and how to fix, delete or work around an errored task and its dependent tasks. A pipeline enters an error state when one or more tasks fail during execution. Mammoth surfaces the failure at the task level so you can identify and fix the problem without inspecting every card. ## How errors appear in the pipeline When a task fails, its card changes to show the problem: - The card border turns red - A red warning icon and an inline message describe the specific failure—for example, **"Missing column: discount_pct"** or **"Type not compatible for: quantity_sold"** - A chevron on the card expands to show the full error detail - Two action buttons appear at the bottom of the card: **Delete** and **Fix error** Tasks positioned downstream of the failed task do not execute until the error above them is resolved. A **This pipeline has errors** banner appears at the top of the Pipeline panel with the message **Fix the failing tasks to continue**. While it shows, the Draft mode toggle is disabled, **Apply now** stays disabled, and column Rename, Hide and Revert in the column menu are unavailable. The View tab at the bottom of the screen shows a **red dot** next to the View name for as long as the pipeline is in an error state. ![Pipeline panel with a red This pipeline has errors banner reading Fix the failing tasks to continue, and a Join task outlined in red with an error message and Delete and Fix error buttons](https://mammoth.io/docs/images/20261009_132643_Pipeline-ErrorBanner.webp) ## What causes a task error The most common cause is a **broken column reference**—a task references a column that no longer exists because an earlier task removed or renamed it. A second common cause is a **type incompatibility**—a task expects a column to be a specific data type, but an upstream task has changed it. For example, if Convert Column Type changes `quantity_sold` from Number to Text, any downstream Math Function performing arithmetic on that column will fail because arithmetic cannot be applied to a Text column. These two causes frequently appear together as a cascade. When one task removes or changes a column, all downstream tasks that depend on it enter an error state simultaneously. Each shows its own specific error message and must be resolved individually. ## Dependency warnings before errors occur Mammoth warns you before an action is likely to cause a downstream error. When you apply a task that removes or modifies a column that other tasks depend on, a **"Dependencies detected"** modal appears before execution proceeds. The modal lists each affected downstream task by number, name, and View. You have two options: - **Cancel**—return to the configuration panel and revise your changes so the dependency is preserved - **Proceed anyway**—apply the change and allow downstream tasks to enter an error state, which you can then fix individually ![Dependencies detected dialog listing Task 2 from Multi-Store_Retail_Sales.csv - View 4, with Proceed anyway button](https://mammoth.io/docs/images/20260417_103949_Dependenciesdetected_modallisting_Task2fromMulti-Store_Retail_Sales.csv-View41.webp) Use **Cancel** when you want to rethink your approach. Use **Proceed anyway** when you are intentionally restructuring the pipeline and plan to fix or remove the dependent tasks immediately after. ## Fixing a task error Click **Fix error** on the errored task card. The configuration panel for that task reopens with the problem highlighted in red—the missing or incompatible column is flagged in the column selector. > **Note:** The **Apply** button remains disabled until you resolve the error condition. For example, a Math Function referencing a non-numeric column shows "Invalid arguments for SUM" and Apply stays disabled until you select a valid numeric column or change the expression. ![Math Function panel with an invalid SUM expression outlined in red and the error Invalid arguments for SUM](https://mammoth.io/docs/images/20260417_104006_MathFunctionconfigurationpanelshowingtheexpressionfieldhighlightedinred1.webp) From the configuration panel you can: - Select a replacement column or correct the expression, then click **Apply** to resolve the error and re-execute the task - Remove the problematic input from the selection and reconfigure with valid inputs - Click **Cancel** to close the panel without changes, leaving the task in its error state > **Note:** The **copy action is disabled** on any task card that is currently in an error state. Resolve the error first before copying the task. ## Deleting an errored task Click **Delete** on the errored task card. A confirmation modal appears listing the task and confirming that it will be permanently removed from the pipeline. Click **Delete** in the modal to remove the task, or **Cancel** to keep it. ![Delete Pipeline Step dialog warning that the Text Formatting task will be permanently removed, with Cancel and Delete buttons](https://mammoth.io/docs/images/20260417_104021_DeletePipelineStep_modalshowing_Thefollowingstepwillbepermanently1.webp) After deletion, downstream tasks that were queued will attempt to re-execute. If they no longer have dependency issues, they run normally and return to a healthy state. ## Adding tasks while errors are present You can continue adding tasks to a pipeline that is in an error state—the **+** button and Transform menu remain active. Cards in an error state have no insert button, so use the **+** button below the last card or on a healthy card. New tasks are added to the pipeline but will not execute until all upstream errors are resolved. Once you fix the errored tasks and the pipeline runs successfully, all queued and newly added tasks execute in sequence. ## View-level error indicator When any task in a pipeline fails, the View tab shows a red dot next to the View name. This persists until all errors are resolved and the pipeline executes successfully. When working across multiple Views, the red dot lets you identify which Views need attention without opening each one individually. --- # Rename, format, and sort columns URL: https://mammoth.io/docs/learn/transform/rename-format-and-sort-columns/ · Updated: 2026-11-02 Rename, format, sort, hide, freeze and reorder columns in a Mammoth View. These are Display Changes, which never alter data or add pipeline tasks. Renaming, formatting, sorting, hiding, freezing, and reordering columns are Display Changes, one of two separate ways to modify a View. The other is Pipeline Tasks, which transform the data itself. This page covers both and explains how they differ. ## Display Changes Display Changes control how data is presented in your View—column names, number and date formatting, column order, sorting, and visibility. They do not transform the underlying data. Most Display Changes apply immediately when you make them directly in the data grid. The Display Changes modal is where you review what has been applied and revert individual changes if needed. Text formatting (changing case or normalizing whitespace) from the Column Menu is not a Display Change. It adds a Text Formatting task to the pipeline. ### Rename a column There are two ways to rename a column: - **Double-click** the column header—an inline text field appears, type the new name and press Enter. - Open the column's **3-dot menu** and select **Rename Column**. ![Column menu showing rename column option highlighted](https://mammoth.io/docs/images/20260417_105237_Columnmenushowingrenamecolumnoptionhighlighted1.webp) ![Column header showing the inline rename field](https://mammoth.io/docs/images/20260508_155745_Columnheadershowingtheinlinerenamefield.webp) Both methods apply immediately. A renamed column's menu also offers **Revert to original column name**. Rename Column, Hide Column and Revert to original column name are disabled while any task in the pipeline is in error; fix the failing task first. There is no Rename Column function in the Transform menu—this is the correct and only method for renaming columns in Mammoth. ### Other Display Changes you can make from the grid - **Format a column**—open the column's 3-dot menu. For date columns, select Format and choose from the available display formats. For numeric columns, set the thousands separator, percentage, currency symbol, or decimal precision. Numeric format changes require clicking **Apply** in the menu. ![Formatting panel open for a numeric column showing currency](https://mammoth.io/docs/images/20260417_105332_Formattingpanelopenforanumericcolumnshowingcurrency1.webp) The same menu for a date column: ![Formatting panel open for a date column showing the date format dropdown](https://mammoth.io/docs/images/20260417_105401_Formattingpanelopenforadatecolumnshowingthedateformatdropdown1.webp) - **Sort the grid**—open the column's 3-dot menu and choose Ascending or Descending in the Sort dropdown. The sort is saved with the View. The **Sort by** button in the data grid footer shows the active sort (or "Default") and opens the Sort Columns dialog for sorting by several columns; an X next to it clears the sort without opening the Display Changes modal. ![Data grid footer showing 153 rows, Showing all 21 columns, and a Sort by customer_age chip with a close icon](https://mammoth.io/docs/images/20260417_105308_-_Datagridfootershowing_Sortby_1.webp) - **Reorder columns**—drag a column header left or right to a new position. Applies immediately. - **Hide a column**—open the column's 3-dot menu and select **Hide Column**. The column is hidden from the grid but remains in the data and is still available in pipeline task dropdowns. Exports leave out hidden columns unless the export's **Include hidden columns** option is selected. - **Freeze a column**—open the column's 3-dot menu and check the Freeze option to pin the column to the start of the grid so it stays visible when scrolling horizontally. ### The Display Changes modal Click **Display Changes (n)** at the bottom of the Pipeline panel to open the modal. The link appears once at least one Display Change is active, and the number shows how many. Hovering over the link shows a tooltip breakdown—for example, "Column Rename (1), Format Changes (2), Grid Changes (2)." ![Bottom of the Pipeline panel with a Display Changes (6) bar and a tooltip: Column Rename 2, Format Changes 2, Grid Changes 2](https://mammoth.io/docs/images/20260417_113612_BottomofPipelinepanelshowing_DisplayChanges51.webp) The modal has three sections in a left-hand list: **Column Rename**—lists every renamed column showing original name → new name. Each entry has an X to revert it individually. ![Display Changes dialog Column Rename tab, mapping customer_id to customer_id_updated and order_status to order_status_renamed](https://mammoth.io/docs/images/20260417_113644_DisplayChangesmodalColumnRenametabshowing_customer_idcustomer_id_updated1.webp) **Format Changes**—lists every column with a display format applied, showing the before and after. Each entry has an X to revert it individually. ![Display Changes dialog Format Changes tab, showing order_date DD-Mon-YYYY to YYYY-MM-DD and order_amount 1000 to €1000](https://mammoth.io/docs/images/20260417_113704_DisplayChangesmodalFormatChangestabshowing_order_date_DD-Mon-YYYYYYYY-MM-DD1.webp) **Grid Changes**—shows active sorting, column order, and hidden columns. Each has an X to revert individually. ![Display Changes modal Grid Changes tab showing Sorting](https://mammoth.io/docs/images/20260417_113722_DisplayChangesmodalGridChangestabshowingSorting1.webp) Each section also has an **Undo changes** button. The submit button reads **Save changes** and is disabled until you make a modification within the modal (such as clicking X to revert something); after that it reads **Apply n changes**. ### Key characteristics of Display Changes - **View-specific**—each View has its own Display Changes. A new View starts with none. - **Apply immediately** in most cases. Format changes require clicking Apply in the formatting panel. - **Do not create pipeline tasks**—the Pipeline panel is unaffected. - **Renamed columns appear with their new names** in the data grid, pipeline task dropdowns, and exports. - **Not part of automation**—Display Changes are presentation only and do not run as part of scheduled pipelines. ## Pipeline Tasks Pipeline Tasks transform the actual data. They are the operations you add through the Transform menu and they make up your pipeline. All 30+ transformation functions, plus Data Check and Checkpoint, are pipeline tasks. ![Pipeline panel showing task cards representing pipeline tasks](https://mammoth.io/docs/images/20260420_154807_Pipelinepanelshowingtaskcardsrepresentingpipelinetasks1.webp) ### Key characteristics of Pipeline Tasks - **Run automatically** every time new data flows through the View. - Apply to **all data**, not just what is currently visible. - Execute in the **order they appear** in the Pipeline panel, top to bottom. - Are **part of automation**—when you schedule a pipeline, these tasks run. - Maintain a **complete history** in the Activity Log. --- # Reshape, Group & Pivot URL: https://mammoth.io/docs/learn/transform/reshape-group-pivot/ · Updated: 2026-11-02 Reference for Group & Pivot and Unpivot in Mammoth: summarize rows by group, pivot values into columns, or convert wide data into long format. The Reshape, Group & Pivot category has two functions for summarizing and restructuring your data. ## Group & Pivot Group & Pivot groups rows by one or more columns and calculates summary statistics. It also supports pivot output—turning unique values from a column into separate column headers, similar to a pivot table in a spreadsheet. ![Group & Pivot panel with product_name and payment_method as rows, promotion_code as columns, SUM of quantity_sold as value](https://mammoth.io/docs/images/20260417_125205_GroupPivotconfigurationpanelshowingthecolumnlistontheleft1.webp) **How to configure:** Drag columns from the list on the left into the three fields: - **Rows**—the columns you want to group by. Each unique combination of values in these columns becomes one row in the result. - **Columns**—a column whose unique values become separate column headers. This is what creates pivot output. Leave this empty if you want a grouped summary without pivoting. - **Values**—the numeric columns to calculate. Choose an aggregation for each: Sum, Average, Min, Max, or Standard Deviation. Use **+ Count** to add a row count, or **+ Distinct count** to count distinct values; **+ Distinct count** is available only while the **Columns** field is empty. **Preview**—the preview is on by default. Use the **Preview ON** / **Preview OFF** toggle in the panel header to hide or show it. ![Group & Pivot Preview modal above the panel, showing a pivoted preview table](https://mammoth.io/docs/images/20260417_125234_GroupPivotPreviewmodal1.webp) **Where the result goes**—by default the result stays in the current View. To send the output to a separate dataset instead, change **Place the result in** to **New Dataset** and give it a name. ## Unpivot Unpivot converts a wide table into a long table by rotating column headers into row values. Use this when your source data has a separate column for each time period or category—for example, Jan_Sales, Feb_Sales, Mar_Sales as three separate columns—and you need a normalized format with a single Month column and a single Sales column instead. Normalized format is required for most grouping, joining, and analysis operations. ![Unpivot panel with Dimensions and Name columns selected, label column title Product, value column title Size, and an example](https://mammoth.io/docs/images/20260417_125251_Unpivotconfigurationpanel1.webp) **How to configure:** Under **Select columns to be transposed**, choose the columns you want to rotate into rows. Once you pick a column, only columns of the same type are offered. Name the **"Label" column**—this will contain the original column headers as values. Name the **"Value" column**—this will contain the original cell values. All other columns in the dataset are preserved and repeated for each rotated row. --- # Understanding the pipeline URL: https://mammoth.io/docs/learn/transform/understanding-the-pipeline/ · Updated: 2026-11-02 How the Mammoth Pipeline panel works. Add, edit, suspend, reorder, copy and delete tasks, and use Draft mode to apply several changes at once. The Pipeline panel is where you build, manage, and run your transformation logic. It lives on the left side of every View. ## What a pipeline is A pipeline is a sequential list of transformation tasks that run from top to bottom. See [Transform and pipeline](https://mammoth.io/docs/learn/transform/) for how pipelines work and what operations are available. The first item in the panel is always **Source**. ![Pipeline panel with a Source card followed by numbered task cards, to the left of the data grid](https://mammoth.io/docs/images/20260420_154151_PipelinepanelshowingSourcecardattopfollowedbynumberedtask1.webp) ## The pipeline panel header At the top of the Pipeline panel you will see a header bar showing the current task count (or "No tasks") and four controls. While Draft mode is on, a **Draft mode ON** label also appears in the header. - **Search**—find a specific task within the pipeline (appears once the pipeline has eight or more cards) - **Cards Density**—toggle between Large and Compact view for task cards, and toggle Display notes on or off - **More Pipeline options (...)**—access the Draft mode toggle, Auto-sync options (shown when Auto-sync is available to you), Pipeline Version history, Paste, and Clear clipboard - **Collapse (|← icon)**—collapses the pipeline panel into a narrow strip of mini task cards, giving the data grid more horizontal space. Click the open icon at the top of the strip to expand the panel back to full width. Use this when you have finished building your pipeline and want to focus on reviewing the data. ![Pipeline panel in collapsed state showing only the narrow header bar](https://mammoth.io/docs/images/20260417_090625_Pipelinepanelincollapsedstateshowingonlythenarrowheaderbar1.webp) ![Animation of the Pipeline panel header with task count, search, and collapse icons above numbered task cards](https://mammoth.io/docs/images/20260513_132424_Pipelinepanelheader.webp) ## How to apply a transformation Every function in the Transform menu follows the same flow. ![Full View with the Pipeline panel on the left, the Describe your transformation bar on top, and Add Column panel below](https://mammoth.io/docs/images/20260417_090712_FullViewinterfaceshowingthePipelinepanelontheleftthe_Describeyourtransformation_bar1.webp) **Step 1—Open the Transform menu** Click the **Describe your transformation** box in the action bar at the top of the View, or the blue **+** button (tooltip "Add a task") next to it. The Transform menu opens showing AI Powered shortcuts by default. Type in the **Describe your transformation** box and the menu filters the functions to those matching your keywords. The **AI SQL Query** result always appears and carries your typed text into its prompt. Once you already have tasks in the pipeline, you can also click a **+** button in the Pipeline panel—below the last task card, or between task cards to insert a task at that position. This opens the same Transform menu. Cards in an error state have no insert button. ![Convert Column Type task card, a New task will be inserted here marker, and a blue plus button with an Add a task tooltip](https://mammoth.io/docs/images/20260420_154550__Bluebuttonbelowataskcard_1.webp) **Step 2—Select a function** Click a category in the left panel to browse its functions, or type in the search bar. Click the function you want. **Step 3—Configure the function** A configuration panel opens at the bottom of the View. Fill in the required fields—column selectors, operators, values, and where to write the result. ![Add Column configuration panel open at the bottom of the View, with a column title field, type buttons and Apply](https://mammoth.io/docs/images/20260417_090837__Configurationpanelopenatthebottom_1.webp) **Step 4—Apply** Click **Apply**. If Draft mode is off, the task executes immediately and the data grid updates. If Draft mode is on, choose **Add to Pipeline** instead; the task is queued and runs when you click **Apply now**. The task card appears in the Pipeline panel showing the function name, its key configuration details, and the row count after it runs. ## Managing tasks ### Task card information Each task card in the pipeline shows the function name, its key configuration summary, and the row count after it ran. Hovering over the **info icon (ⓘ)** on a task card shows an audit tooltip with: who last modified the task, the date and time of the last modification, and the execution time of the last run. ![Task card hover toolbar and an info tooltip reading Created by Priya Gour, Feb 16, 2026 2:50 PM](https://mammoth.io/docs/images/20260417_090917__Taskcardwiththeinfoicontooltipvisibleshowing_Lastmodified_1.webp) ### Task insertion position When a function configuration panel is open and you are about to add a task, the pipeline shows a **"New task will be inserted here"** placeholder card indicating exactly where the new task will appear once you click Apply. This helps orient you when working in a pipeline that already has multiple tasks. ![Pipeline panel with the new-task marker below Convert Column Type, and the Bulk Replace panel open with a column selector](https://mammoth.io/docs/images/20260417_091012_Pipelinepanelshowingthe_Newtaskwillbeinsertedhere1.webp) ### Editing a task Hover over any task card to reveal its action bar. The actions available are: ![Animation of a task card hovered, showing its toolbar of icons above the Bulk Replace task](https://mammoth.io/docs/images/20260513_134058_Taskcardonhover.webp) - **Add note**—attaches a note to the task. Turn on **Display notes** in Cards Density to show notes on the cards. - **Suspend (pause icon)**—temporarily disables the task without deleting it. The task card shows "Suspended" and is skipped during pipeline execution. Use this to test what the pipeline produces without a specific task, without losing its configuration. - **Copy**—copies the task configuration to the clipboard so you can paste it into another position or another View. Copy is disabled for Edit Cells tasks and for tasks in an error state. - **Restore**—replaces Suspend on a suspended task and turns it back on. - **Edit (pencil icon)**—reopens the configuration panel so you can change the task's settings. - **More options (...)**—opens a menu with Rename, Duplicate, Paste below, and Delete. ![Task More options menu open, listing Rename, Duplicate, Paste below and Delete](https://mammoth.io/docs/images/20260417_091058_MoreoptionsmenushowingRenameDuplicatePastebelow1.webp) ### Renaming a task From the More options menu, select **Rename** to give the task a descriptive name. This is useful in long pipelines where the default function name is not specific enough. ### Duplicating a task Select **Duplicate** from the More options menu to open the configuration panel pre-filled with the task's settings, then apply it to add the copy. Useful when you need the same transformation logic applied in a slightly different configuration. Duplicate is not offered for Edit Cells tasks. ### Deleting a task Select **Delete** from the More options menu. Mammoth checks whether any downstream tasks depend on columns or logic from the task being removed. If they do, it shows a warning before proceeding. ### Reordering tasks Drag any task card up or down in the pipeline panel to change its position. Mammoth validates dependencies before allowing a reorder—if moving a task would break a downstream task, a warning is shown. ## Draft mode Draft mode controls when tasks execute. Access it from the **More Pipeline options (...)** menu at the top of the Pipeline panel. ![Conditional Filter task marked New, with a Pipeline has Pending Updates bar offering Discard, Review and Apply now](https://mammoth.io/docs/images/20260420_154644_PipelinepanelwithDraftmodeONshownintheheadertaskcardsmarked_New_1.webp) | Mode | Behavior | Best for | | --- | --- | --- | | **Immediate** (Draft mode off) | The task applies and the data grid updates instantly | Single tasks, small datasets, quick exploration | | **Draft mode** | Tasks are queued and applied as a batch when you click **Apply now** | Testing complex multi-task logic, large datasets | **Draft mode off (default)** The label "Tasks will be applied instantly" is shown. Each task executes immediately when you click Apply. The data grid updates in real time after each task. Use this when working with smaller datasets and when you want to see results step by step. **Draft mode on** The pipeline header shows **Draft mode ON**. Tasks you add or modify are queued—they do not execute immediately. When you apply any task, the function panel's split button defaults to **Add to Pipeline**. ![Conditional Filter panel with an Add to Pipeline button while Draft mode is ON](https://mammoth.io/docs/images/20260417_091304_FunctionpanelshowingtheAddtopipelinebuttonfor1.webp) The Draft mode toggle is disabled while the pipeline is in an error state, and **Apply now** stays disabled until the failing tasks are fixed. If another user already has unpublished changes on the pipeline, an "Adding to another user's draft" warning explains that your task joins their draft and does not go live until it is published; choose **Add anyway** to continue. Pending changes are listed in the Review modal as **New**, **Edited**, **Removed**, **Reordered**, or **Suspended**. The data grid continues to show the state from the last time the pipeline actually ran. ![Pipeline panel with Draft mode ON, tasks marked New and Edited, and the Pipeline has Pending Updates bar with Discard, Review and Apply now](https://mammoth.io/docs/images/20261009_132158_Pipeline-DraftMode-On.webp) When you have queued changes, a bar appears at the bottom of the pipeline panel showing **"Pipeline has Pending Updates"** with three options: - **Discard**—removes all pending changes and reverts the pipeline to its last executed state - **Review**—opens a modal listing every pending change by task number, task name, and the type of update (New, Edited, Removed, Reordered, or Suspended) - **Apply now**—executes all pending tasks together in one run ![Review Pending Updates dialog listing Convert Column Type as Suspended and Conditional Filter as New](https://mammoth.io/docs/images/20260417_091355_ReviewPendingUpdatesmodalshowingatablewithTaskNo.TaskName1.webp) To restore the pipeline's prior state, click **Discard**. A dialog lists the changes that will be discarded, with each task's details and status. ![Discard Pipeline changes dialog listing the same two tasks, with Cancel and Discard changes buttons](https://mammoth.io/docs/images/20260417_091414_DiscardChangesmodalshowingtablewithtask1.webp) Use Draft mode when working with large datasets or when building a pipeline with many tasks where you want to configure the full sequence before running anything. ## Pipeline version history Open **More Pipeline options (...)** > **Pipeline Version history** to see earlier versions of the pipeline. Select a version to preview its tasks. From the dialog you can **Copy pipeline**, **Save as template**, or **Restore this version**; select individual tasks and click **Copy tasks** to paste them elsewhere. How many older versions you can see depends on your plan. ![Version history dialog listing earlier pipeline versions by date, with a task preview and the Copy pipeline, Save as template and Restore this version buttons](https://mammoth.io/docs/images/20261009_132210_Pipeline-VersionHistory-Dialog.webp) ## Copying and pasting tasks Copy any task using the copy icon on hover, then use **Paste below** from the More options menu of any task, or **Paste** from the More Pipeline options menu to paste at the end of the pipeline. Copied tasks preserve all configuration including parameter bindings. Use this to reuse transformation logic across Views without reconfiguring from scratch. ![Animation of copying a task with its hover toolbar and pasting it below another task](https://mammoth.io/docs/images/20260513_141413_Createacopyandpaste1.webp) ## Pipeline performance For best performance, structure your pipeline in this order: 1. Validate early—Data Check tasks near the top 2. Filter early—Conditional Filter to reduce row volume 3. Clean columns—Remove or Convert Column Type 4. Standardize—Bulk Replace, Text Formatting 5. Enrich—Join, Lookup, Add Column 6. Calculate—Math Function, Window Function 7. Format—Label & Insert Values, Combine Columns 8. Govern—Checkpoint before export To build one end to end, follow [Your first pipeline](https://mammoth.io/docs/learn/getting-started/first-pipeline/). --- # Unify URL: https://mammoth.io/docs/learn/transform/unify/ · Updated: 2026-11-02 Reference for the Unify functions in Mammoth: Join and Lookup to combine data from another View, and Send to Dataset to write pipeline output to a dataset. The Unify category has three functions for combining data across datasets and Views: Join and Lookup bring data from another View into the current pipeline, and Send to Dataset routes processed data out to another dataset. To open the function list, click the **"Describe your transformation"** bar (or a **+** button in the Pipeline panel) and select **Unify**. ## Join Join combines data from another View into the current View using one or more common key columns. Matched columns from the foreign View are added alongside your existing data—the result is a single enriched dataset, not two separate tables. ![Join panel before a view is chosen, with a Select a view to join with button](https://mammoth.io/docs/images/20260417_130628_Screenshot2026-04-120000511.webp) **How to configure:** **Step 1—Select a view to join with** Click **Select a view to join with**. A two-level picker opens—first choose the dataset, then choose the View within it. ![Select a view to join with dialog listing Data Library files and the views in the selected file](https://mammoth.io/docs/images/20260417_125427_Viewselectionmodal1.webp) Once selected, both Views are shown side by side as a preview—the current View on the left with a blue border, the foreign View on the right with an orange border. This lets you verify you have the right data before configuring the join. ![Both views displayed side by side after a view has been selected](https://mammoth.io/docs/images/20260417_125446_Bothviewsdisplayedsidebysideafteraviewhasbeenselected1.webp) **Step 2—Define common keys** - **Key column of current view / Key column of foreign view**—select the matching column from each side. These are the columns Mammoth uses to align rows between the two Views. - Click **Add key columns** to add additional key pairs when matching on more than one column is needed. - When the current View key is a number or date column, tick **Add range** under the key pair to match within a range instead of exactly, for example times within ±10 minutes. Enter how far below (**From -**) and above (**to +**) the value to match. For date keys, also choose the unit: milliseconds, seconds, minutes, hours, days, weeks, months or years. ![Join common keys with a number key pair and the Add range option ticked, showing From and to range fields](https://mammoth.io/docs/images/20261009_120300_Join-AddRange.webp) ![The Common keys section with two key pairs already mapped](https://mammoth.io/docs/images/20260417_130600_TheCommonkeyssectionwithtwokeypairsalreadymapped1.webp) **Step 3—Choose columns to bring in** - **Join columns**—check the columns from the foreign View you want to add to your current View. Use the search box to find columns quickly. Unchecked columns are excluded from the output. ![The Join columns checklist with several columns checked and a search box at the top](https://mammoth.io/docs/images/20260417_130538_TheJoincolumnschecklistwithseveralcolumnscheckedandasearchboxatthetop1.webp) **Step 4—Set the join type** Choose how rows from each side are handled when there is no matching key. ![Left Join diagram: Table 1 and Table 2 matched on Key Column, with all Table 1 rows kept in the result](https://mammoth.io/docs/images/20260511_175858_Screenshot2026-04-27110614.webp) | Join type | What it returns | | --- | --- | | **Left** | All rows from the current View. Rows with no match in the foreign View get blank values for the joined columns. Use this to preserve all your current records and add supplementary information where available. | | **Right** | All rows from the foreign View. Rows in the current View with no match are removed. Use this when you want to see all records from the reference dataset and which ones have matches. | | **Inner** | Only rows that have a matching key in both Views. Rows without a match on either side are excluded. Use this when you only want complete, fully matched records. | | **Outer** | All rows from both Views. Rows with no match on either side get blank values for the unmatched columns. Use this when you need to see everything from both datasets and identify gaps. | **Step 5—Set a prefix (optional)** - **Prefix**—enter a prefix to prepend to all joined column names, for example `cust_` or `prod_`. This prevents naming conflicts when the foreign View contains columns with the same names as your current View. ![Prefix field in the Join panel filled in with a sample prefix](https://mammoth.io/docs/images/20260417_125629_hePrefixfieldfilledinwithasampleprefix1.webp) **Step 6—Apply the join** Click **Apply**. The Join task card in the pipeline lists the joined View, common keys, joined columns, join type, and prefix. ![Join panel under two previewed Views, with common keys, join columns, join type options and a Prefix field](https://mammoth.io/docs/images/20260417_125827_Applyjoin1.webp) **Non-unique key values** If the key columns contain non-unique values, the Join task card shows a warning with a **More details** link. The link opens this dialog: ![Key column(s) have non-unique values dialog listing a duplicate entry (mita, 2), with Download as CSV and Edit task buttons](https://mammoth.io/docs/images/20260417_125955_JoininPipelineshowingnon-uniquevalues1.webp) > If key columns contain non-unique values, Mammoth warns you in the pipeline task card after applying. When keys are not unique on both sides, a many-to-many relationship is created and the row count can multiply unexpectedly. Verify key uniqueness before joining large datasets, or use Remove Duplicate Rows first to clean the key column. > > For large datasets, this isn't always just a warning—if the predicted result would exceed 100,000 rows **and** be more than 5x the size of the larger input View, Mammoth blocks the join outright and the task fails with an error instead of completing. Deduplicate your key columns first to avoid this. **Example:** An `Orders` View has columns `ID`, `Customer ID`, `Subtotal`, `Tax`, and `Total`. A separate `Customers` View has `ID` and `Name`. The key column names differ: `Customer ID` on the Orders side maps to `ID` on the Customers side. Orders View (current): | ID | Customer ID | Subtotal | Tax | Total | | --- | --- | --- | --- | --- | | 1 | 2 | 151 | 15 | 167 | | 2 | 1 | 89 | 9 | 98 | | 3 | 4 | 89 | 9 | 98 | Join on `Customer ID` ↔ `ID`, select `Name`, set the prefix to `Customer`, and choose a Left join. After the join: | ID | Customer ID | Subtotal | Tax | Total | Customer.Name | | --- | --- | --- | --- | --- | --- | | 1 | 2 | 151 | 15 | 167 | Katie | | 2 | 1 | 89 | 9 | 98 | John | | 3 | 4 | 89 | 9 | 98 | Raj | Every order now shows the customer's name. Customer 3 (Priya) exists in the Customers View but placed no orders, so with a Left join she doesn't appear. Switch to a Right join to surface customers with no orders: Priya's row appears with blank values for all order columns, making it easy to identify customers who haven't ordered yet. ## Lookup Lookup retrieves a single value from another View based on a matching key and writes it as a new column. Think of it as an automated VLOOKUP that works across your entire dataset. Lookup is a simpler alternative to Join—use it when you need to pull one specific column from a reference View rather than bringing in multiple columns with full join control. **How to configure:** **Step 1—Select a view to look up from** ![Lookup panel before a view is chosen, with a Select a view to lookup from link](https://mammoth.io/docs/images/20260417_130134_Lookup-select-view1.webp) Open the Transform menu, select **Unify**, then choose **Lookup**. A picker opens—first choose the dataset, then choose the View within it. Once selected, both Views appear side by side—current View on the left with a blue border, foreign View on the right with an orange border. The foreign View name appears as a button at the top of the panel. **Step 2—Set the key columns and value column** - **Current view key column**—the column in your current View that contains the matching key. - **Foreign view key column**—the corresponding key column in the foreign View. Mammoth uses these two columns to align rows between the Views. - **Foreign view value column**—the single column whose value you want to retrieve. The dropdown shows each column name with its data type in parentheses—for example, `unit_cost (Number)` or `region (Text)`. **Step 3—Set the output column** The output control reads **Place in new column**. Click the word **new** to open a menu: - **New**—enter a name in the field provided. The column type is inferred from the selected value column; use the type selector icons to override it: **T** for Text, the date icon for Date, or **#** for Number. - **Existing**—a secondary dropdown appears. Select the column in your current View to overwrite with the retrieved values. ![Lookup panel with current view key column brand, foreign view key column city, value column country, and a Place in new text column field named Country_Import](https://mammoth.io/docs/images/20261009_120400_Lookup-Panel.webp) **Step 4—Apply the lookup** Click **Apply**. The Lookup task card in the pipeline lists the key columns, value column, and output column. ![Pipeline with a Lookup task, and the data grid showing the new City_Import column](https://mammoth.io/docs/images/20260417_130258__Lookupapplied_1.webp) > Lookup always performs a Left join—all rows in the current View are preserved. Rows with no matching key in the foreign View get a blank value in the new column. > Unlike Join, Lookup never multiplies rows. If the foreign View key column contains duplicate values, Mammoth resolves to a single matching row automatically—your current View's row count stays exactly the same either way. Which duplicate row wins isn't something you control, so if you need predictable results from a key with duplicates, use Remove Duplicate Rows on the foreign View first, or use Join instead if you need explicit control over duplicate matches. **Example:** A `Mark Sheet` View has `Student ID` and `Total Marks`. A separate `Students` reference View has `ID` and `Name`. Use Lookup with `Student ID` as the current View key, `ID` as the foreign View key, and `Name` as the value column. Name the new column `Name` and click **Apply**. Mark Sheet (current): | Student ID | Total Marks | | --- | --- | | 2 | 239 | | 1 | 232 | | 4 | 200 | After Lookup: | Student ID | Total Marks | Name | | --- | --- | --- | | 2 | 239 | Bob | | 1 | 232 | Alice | | 4 | 200 | Diana | Student 3 (Chuck) exists in the Students View but has no entry in the Mark Sheet, so no extra rows are added. Any `Student ID` with no match in the Students View gets a blank `Name` value. > Need to bring in multiple columns or control which rows are kept? Use **Join** instead. ## Send to Dataset Send to Dataset sends processed data from the current View to another dataset—either a new one or an existing one. Use this to route the output of a pipeline into a separate dataset for downstream analysis, reporting, or further transformation. **How to configure:** **Step 1—Choose a destination** - **New Dataset**—enter a name for the new dataset. By default it is saved in the current project. To save it somewhere else in your workspace, click the Edit icon and choose a different location. - **Existing Dataset**—select the target dataset from the dropdown. Use the search box to find it quickly. ![The destination selection step showing the New Dataset option](https://mammoth.io/docs/images/20260417_173125_ThedestinationselectionstepshowingtheNewDatasetoption1.webp) ![Select Dataset Location dialog with a project list, Data Library folders, and destination Branch Out Data](https://mammoth.io/docs/images/20260417_173726_set_location1.webp) Click **Next** to proceed to the column mapping step. **Step 2—Map columns** ![Column mapping step with source columns on the left connected by arrows to destination columns](https://mammoth.io/docs/images/20260417_173748_Thecolumnmappingstepshowingsourcecolumnsontheleftconnectedbyarrowstodestinationcolumn1.webp) - **All columns toggle**—when on, all columns from the current View are sent to the destination. Turn it off to configure columns individually. - **Individual column rows**—each row shows a source column mapped to a destination column. Toggle a row off to exclude that column. When sending to an existing dataset, you can map each column to a destination column or create a new one, and **Hide already-mapped columns from selection menu** declutters the list. - **Include hidden columns**—tick this to include columns that are hidden in the current View's display settings (shown when the View has hidden columns). - **Add Condition**—optionally restrict which rows are sent, using the same condition builder available in other functions. **Step 3—Set task behavior** ![The bottom of the panel showing Task Position checkbox](https://mammoth.io/docs/images/20260417_173803_ThebottomofthepanelshowingTaskPositioncheckbox1.webp) - **Task Position**—tick **Keep at the end of the Pipeline** to ensure this task always runs last, regardless of where it sits in the pipeline order. - **Update Method**—choose how the destination dataset is updated each time the pipeline runs: - **Replace data**—overwrites the destination with the current output on every run. Use this when the destination should always reflect the latest state of the pipeline. - **Combine data**—appends the current output to the destination, adding rows rather than replacing them. Use this to accumulate data over time, for example appending weekly sales results into a master dataset. **Example:** A pipeline cleans and enriches a raw sales View. Use Send to Dataset pointing to a `Reporting_Dataset` with Update Method set to Replace data. Every time the pipeline runs, the reporting dataset is refreshed with the latest clean output. --- # Trash and recovery URL: https://mammoth.io/docs/learn/trash-recovery/ · Updated: 2026-11-02 Deleted Datasets, Views, Automations, Dashboards, and Folders stay in Trash for the trash retention period. See what is recoverable, how to restore or purge items, and what is not. When you delete a **Dataset**, **View**, **Automation**, or **Dashboard** in Mammoth, it doesn't disappear immediately. It moves to **Trash**, where it stays recoverable for the trash retention period before being automatically and permanently removed. This page is for anyone who deletes or restores content. Start with [What's recoverable today](#whats-recoverable-today). Trash does not cover every resource type. Some resource types don't use Trash yet, and deleting them is immediate and permanent. Check the table below before deleting. ## What's recoverable today | Resource type | Goes to Trash? | What happens instead | | --- | --- | --- | | **Datasets** | Yes | Recoverable until the retention period ends | | **Views** | Yes | Recoverable until the retention period ends | | **Automations** | Yes | Recoverable until the retention period ends | | **Dashboards** | Yes | Recoverable until the retention period ends. See [Trashing a dashboard](#trashing-a-dashboard) | | **Folders** | Partially (see below) | The folder's *contents* go to Trash; the empty folder is then removed automatically | | **Parameters** | No | Deleted immediately and permanently | | **Projects** | No | Deleted immediately and permanently | | **Connections** | No | Deleted immediately and permanently | | **Reports, Data Apps, Webhooks** | No | Deleted immediately and permanently | > **If a resource is not in this table, treat deletion as permanent.** In particular, Parameters don't behave like Datasets even though they sit in the same Data Library area. A deleted Parameter is gone immediately, with no Trash entry and no restore option. > **Dashboards are recoverable.** The delete dialog reads "This dashboard goes to Trash. You can restore it from there for {days} days." Trashing a dashboard also unpublishes it. ## Trashing a dataset **Prerequisite**: You have delete permission on the dataset. 1. In the Data Library, open the row's `···` menu, or open the dataset panel and use the action row. 2. Click **Delete**. ![Dataset panel with an Open button, action icons, a trash icon, an Overview table of Views, and a data preview](https://mammoth.io/docs/images/20260723_114347_overview_section1.webp) 3. A **Move to Trash?** confirmation opens: > **Move to Trash?**\ > **{dataset name}** will be moved to Trash and automatically deleted in {days} days unless restored. You can restore it any time before the deletion date from the Trash section.\ > [Cancel] [Move to Trash] ![Move to Trash? dialog stating the dataset will be deleted in 30 days unless restored, with Cancel and Move to Trash buttons](https://mammoth.io/docs/images/20260723_123749_Screenshot2026-07-231725381.webp) 4. Click **Move to Trash**. **Expected result**: The dataset disappears from the Data Library immediately and appears in the project's Trash listing. > **Note the naming:** The row menu says **Delete**, not "Move to Trash". The reversible wording only appears once the confirmation dialog opens. ### Deleting a file with a data-quality issue If a file is flagged with an unresolved issue (for example, mismatched columns), its detail panel shows **Review & Fix** and **Delete File** buttons instead of the usual action row. Clicking **Delete File** opens the same Move to Trash confirmation. A file that failed processing is trashed the same way as a clean one. An unprocessed file blocks its folder from being trashed. See [Trashing a folder](#trashing-a-folder). ![Move to Trash? dialog for unstructured.csv over a file panel showing Review & Fix and Delete File buttons](https://mammoth.io/docs/images/20260723_120625_Screenshot2026-07-221728501.webp) ## Trashing a view A View has three delete entry points, and all three open the same Move to Trash confirmation: | Where | How to get there | | --- | --- | | **Data Library → dataset panel → Overview** | The Views table lists every View on the dataset; use the row's `···` menu, or select multiple rows and click **Delete selected views** to trash several at once | | **Data Library → dataset panel** | Open a View, then use its options menu → **Delete** | | **Data Editor** | While editing the view, use the view's options menu → **Delete**. You don't need to leave the editor. | ![View Settings menu on a view row with Open, Auto-sync, Rename, Duplicate, Reset, Apply template, Delete in red, and Summary](https://mammoth.io/docs/images/20260723_123800_image7.webp) The confirmation reads the same way as a dataset's, referencing the view by name, where {days} is the trash retention period: > *View 2* will be moved to Trash and automatically deleted in {days} days unless restored. You can restore it any time before the deletion date from the Trash section. Trashing a view also trashes the dashboards built on it. Views count as their own items in Trash. When you delete a dataset together with its Views, the Views are listed with the dataset in the Trash listing. > **Trashing the last View on a dataset also trashes the dataset.** If a dataset has only one View left and you trash it, Mammoth automatically trashes the now-empty parent dataset too, so you don't need a separate step. When you restore, Mammoth's confirmation lists what comes back with the item. > **Watch for triggers that reference a trashed dataset.** If a pipeline elsewhere uses "branch out" or "save as a new dataset" targeting a dataset that gets trashed, that trigger is suspended and stops running. Restoring the dataset does **not** automatically re-enable the trigger; you'll need to turn it back on manually. If a downstream pipeline mysteriously stopped updating, check whether its target dataset was trashed and restored in the meantime. ## Trashing a folder Folders can't be trashed on their own. Trashing a folder trashes everything *inside* it (its datasets), and the now-empty folder is then removed automatically. Mammoth keeps the folder, and shows "Some items in {name} can't be moved to Trash.", if it holds a file that hasn't finished processing or a dataset that failed to move to Trash. The confirmation copy makes this explicit: > The contents of **{folder name}** will be moved to Trash and automatically deleted in {days} days unless restored. You can restore the contents any time before the deletion date from the Trash section. ![Move to Trash? dialog saying the contents of the PDF to CSV folder will be moved to Trash, over an empty folder panel](https://mammoth.io/docs/images/20260723_121218_Screenshot2026-07-221728021.webp) In Trash afterward, you see the folder's individual datasets and views listed, not a single "folder" row. ## Trashing an automation From the automation's detail panel or its `···` menu, click **Delete**. The same Move to Trash confirmation appears, and the automation is recoverable until the retention period ends like any other trash-supported resource. Trash lists automations as "Orchestrations" in its type filter and tooltips. See [Managing automations](https://mammoth.io/docs/learn/automations/managing-automations/#deleting-an-automation) for the full deletion steps specific to automations. ## Trashing a dashboard From the Publish Library, use the dashboard's overflow menu and click **Delete**. The confirmation reads: "This dashboard goes to Trash. You can restore it from there for {days} days." Trashing a dashboard unpublishes it, so its published link stops serving viewers. A restored dashboard comes back as a Draft. ![Delete dashboard confirmation saying the dashboard goes to Trash and can be restored from there](https://mammoth.io/docs/images/20261009_021023_Dashboard-delete-to-trash-dialog.webp) If you can't edit a dashboard built on a view or dataset you're trashing, Mammoth blocks the action. See [When you can't trash something](#when-you-cant-trash-something). ## The trash section Trash is **project-scoped**: each project has its own Trash, and it only shows items that were trashed from that project. The subtitle reads "Items are permanently deleted after {days} days". ### Open Trash Click the **Trash** (bin) icon at the bottom of the left navigation rail, next to Settings. The Trash page has its own project selector next to the title. ![Left navigation with a Trash tooltip on the bin icon next to the Settings icon, beside a Data Library file list](https://mammoth.io/docs/images/20260723_121347_Screenshot2026-07-221729471.webp) ### What the Trash listing shows The Trash listing shows every trashed item across all supported resource types for the current project, with: - **Name**, **Type**, and **Location** (folder / parent dataset) - **Size** - **Deleted on** and **Deleted by** - A **countdown**, such as "29 days left" (or "Deletes today"), showing time remaining before automatic permanent deletion - A search box (**Search deleted items**) and filters: **All types**, **Deleted by**, and a date filter (**Deleted anytime**, **Deleted today**, **Deleted this week**, or **Deleted older**) - A **deleting soon** toggle (for example, "3 deleting soon") to surface items closest to permanent deletion, and a banner (for example, "3 items are deleted for good in the next {days} days") with a **Review** link The listing also updates live. If a teammate trashes, restores, or permanently deletes something while you have the Trash page open, your view refreshes automatically. ![Trash page for the Processing project listing unstructured.csv with 29 days left, filters, and an Empty trash button](https://mammoth.io/docs/images/20260723_121533_Screenshot2026-07-221730071.webp) When nothing has been deleted yet, the page shows: > **Trash is empty for this project.**\ > Deleted datasets, views, dashboards, automations, and folders show up here and are kept for {days} days before they are permanently removed. Mixed resource types appear side by side in the same listing. For example, an Automation and a Dataset (with its own View nested under it) can both show up together, and a bulk selection can restore or permanently delete across types in one action. ## Restoring an item **Prerequisite**: You have update permission on the item. Mammoth only asks for confirmation when restoring brings back, or leaves behind, related items (for example, a dashboard and the view it reads from). The confirmation lists what comes back with the item, and which items stay in Trash because they were deleted separately. A dashboard deleted together with its source view can't be restored on its own. - **Single item:** hover over the row and click the restore icon (**Restore item**) at the end of the row. - **Multiple items:** select their checkboxes, then click **Restore selected** in the selection action bar. A toast confirms "{count} items restored from Trash". ![Trash page with unstructured.csv selected, showing a Restore button and a Delete forever button above the list](https://mammoth.io/docs/images/20260723_123236_Screenshot2026-07-221730321.webp) A restored dataset reappears in its original folder (Mammoth remembers where it was). A restored view reappears attached to its parent dataset. A restored automation reappears in the Automations list, resuming its normal state. A restored dashboard comes back as a Draft, ready to go Live again. ## Permanently deleting an item ("delete forever") If you don't want to wait for the retention period to end, you can permanently delete a trashed item immediately: 1. Select one or more items in the Trash listing (checkbox), or hover over a row and use its delete icon (**Delete forever**) for a single item. 2. Click **Delete forever**. 3. Confirm in the dialog: > **Delete forever**\ > You are about to permanently delete {n} item(s). Deleting a dataset or folder also removes everything inside it. Their storage is freed immediately. > > ⚠ **This cannot be undone. Permanently deleted items can't be restored.** > > [Cancel] [Delete forever] ![Delete forever dialog warning that permanently deleted items can't be restored, with Cancel and Delete forever buttons](https://mammoth.io/docs/images/20260723_123402_Screenshot2026-07-221730481.webp) **Expected result**: The item is permanently removed. There's no undo after you confirm. ## Emptying trash entirely **Empty trash** permanently deletes everything currently in the project's Trash—not just what your current filters show. 1. Click **Empty trash** at the top of the Trash listing. 2. A confirmation dialog opens, warning that this deletes **everything in Trash for this project**, and shows a dynamic count of how many items and how much storage will be freed. 3. Type **EMPTY** into the confirmation field. The red **Empty trash** button stays disabled until you type it exactly. 4. Click **Empty trash**. **Expected result**: The project's Trash is empty. ![Empty trash dialog asking you to type EMPTY to confirm, with a disabled Empty trash button](https://mammoth.io/docs/images/20260723_123439_Screenshot2026-07-221754091.webp) > **Empty trash ignores your active filters.** If you've filtered the Trash listing to "Datasets only" or "Deleted by me", Empty trash still deletes the *entire* project Trash: every type and every user. Filtering only changes what you *see*; it doesn't scope what Empty trash deletes. ## Automatic purging Every trashed item carries its own countdown from the moment it was trashed. Once that countdown reaches zero, Mammoth automatically and permanently removes the item—you don't need to do anything, and you can't prevent or extend it from the self-service UI. - **Retention window:** the trash retention period, counted from the trash date and shown per-item as a "days left" countdown. - **The purge itself:** runs automatically on a recurring schedule in the background, queuing the actual hard-delete as a background job rather than freeing everything the instant the countdown hits zero. You don't see a notification when it happens; the item is no longer in the Trash listing. - **No recovery after purge.** Once an item is auto-purged (or manually sent through Delete forever / Empty trash), it's gone. ## When you can't trash something Some resources depend on others (dependent items). If you try to trash a Dataset that other, still-active items depend on, Mammoth blocks the action and shows a **Cannot move to Trash.** toast listing the dependent items in the way. This covers **Automations** that reference the dataset (for example, as a refresh target or a Data Consolidation source/destination), and dashboards you can't edit that are built on the dataset or its views. The same dashboard rule applies when you trash a view. To resolve it: edit or delete the automations, ask an editor to remove or reassign the dashboards you can't edit, or keep the dataset. ## Permissions - **Trashing** requires delete permission on each item. - **Restoring** requires update permission on each item. If you can't see a Delete option on something, you likely don't have the permission needed to trash it either. ## What still deletes permanently (no trash) These resource types are **not** trash-supported today. Deleting any of them is immediate and permanent, exactly as it always has been: | Resource | Where it's documented | | --- | --- | | **Parameters & Snippets** | [Deleting a parameter or snippet](https://mammoth.io/docs/learn/data-library/parameters-snippets/#deleting-a-parameter-or-snippet) | | **Projects** | [Leaving or deleting a project](https://mammoth.io/docs/learn/projects/create-project/#deleting-a-project) | | **Connections, Reports, Data Apps, Webhooks** | See each feature's own management page | None of these has a Trash entry, a countdown, or a restore option. ## Limitations | Limitation | Details | | --- | --- | | Not all resource types are covered | Only Datasets, Views, Automations, Dashboards, and Folders (contents only) go to Trash today; see [What's recoverable today](#whats-recoverable-today) | | Folders aren't a Trash row type | Trashing a folder trashes its contents; the folder itself is removed once empty | | No partial Empty Trash | Empty trash always clears the entire project Trash, ignoring active filters | | No self-service extension of the retention period | The retention period isn't user-configurable from the UI | | Trash is project-scoped | There's no cross-project or workspace-wide Trash view | | Dependent items can block trashing | You may need to remove dependents first, including Automations that reference a dataset and dashboards you can't edit | ## Related articles - [The dataset panel](https://mammoth.io/docs/learn/data-library/dataset-panel/): Full reference for the dataset side panel, including the action row's Delete button - [Cloning and moving datasets](https://mammoth.io/docs/learn/data-library/clone-move-data/): Other dataset lifecycle actions that aren't affected by Trash - [Managing automations](https://mammoth.io/docs/learn/automations/managing-automations/#deleting-an-automation): Automation-specific deletion steps - [Managing dashboards](https://mammoth.io/docs/learn/dashboard/managing-dashboard/#deleting-a-dashboard): The dashboard delete flow, including the Trash confirmation - [Parameters and snippets](https://mammoth.io/docs/learn/data-library/parameters-snippets/): Why parameter and snippet deletion is still permanent --- # Connection troubleshooting URL: https://mammoth.io/docs/learn/troubleshooting/connection-troubleshooting/ · Updated: 2026-11-02 Diagnose Live Connection failures: import and export authentication errors, pipeline errors, schema mismatches, firewall and network issues, and rate limits. Live Connections can fail because of authentication changes, network problems, or source system updates. This guide covers failures in data import, data export, pipeline execution, and data addition. It is for anyone whose automation shows an **Error** status or whose refresh fails. ## Understanding connection failures Live Connections don't have a status you can check ahead of time. A connection's health is only revealed when a refresh actually runs and either succeeds or fails. - **Normal operation:** OAuth-based connections proactively refresh their access token before it expires, so most connections keep working without any action from you. - **Authentication failure:** If a credential is revoked, rotated at the source, or a token refresh fails, the next refresh for that connection fails with an authentication-specific error. Reconnecting the Live Connection is required. See [Authentication failures](#authentication-failures). - **Other failures:** Source-system downtime, network issues, and rate limiting surface as a generic runtime error. There is no separate "temporarily unavailable" state, and no automatic retry. See [Connection failures during automation runs](#connection-failures-during-automation-runs). ## Common issues and how to resolve them ### Authentication failures Authentication failures occur on both the import side and the export side. These involve separate credentials and must be resolved independently. #### Import authentication failures (PostgreSQL, MSSQL, and other source connectors) When a Live Connection used for data import loses authentication—due to an expired token, a rotated password, or a revoked credential—the dataset refresh fails with an authentication-specific error. The automation shows an **Error** status; open it and check **Last run result** for the reason. To resolve, reconnect the affected Live Connection, then run the automation again with **Run now** to confirm it works. #### Export authentication failures (PostgreSQL, BigQuery, and other export destinations) Export authentication failures occur when the write credentials for a destination have expired or been revoked. This is separate from a source connection failure—the export destination has its own credentials that must remain valid independently. To resolve, update the export destination credentials in the export configuration. Use **Validate Connection** in the export form to confirm the credentials work before you apply the change, then re-run the export. If you are using a Mammoth managed PostgreSQL or BigQuery database, Mammoth manages authentication—contact support if you encounter failures on these destinations. --- ### Pipeline errors Pipeline errors occur when a transformation task fails during execution. These are the most common error types you'll encounter after a connection or schema change. #### Column missing A pipeline task references a column that no longer exists in the dataset. This typically happens when the source schema has changed—a column was renamed, removed, or its data type was modified upstream. Identify which task in the pipeline is referencing the missing column, update the task to reference the correct column, and re-run the pipeline. #### Type change errors A column's data type has changed at the source, causing downstream pipeline tasks that depend on that column's type to fail. Update the affected tasks to account for the new type, or add a type conversion step earlier in the pipeline before retrying. #### Dependency errors A pipeline task depends on another task or a secondary dataset that is in an error state. Tasks don't run if their dependencies have failed. Resolve the upstream error first, then re-run the pipeline. #### Slow pipeline runs This isn't a pipeline error as such—the pipeline still completes—but execution can take significantly longer than expected. This is typically caused by a large increase in data volume at the source, or a transformation task processing more rows than anticipated. Review which task in the pipeline is responsible for the slowdown, and consider adding filters to reduce the data volume being processed at that step. See [Pipeline optimization](https://mammoth.io/docs/learn/performance/pipeline-optimization/) for detailed guidance. ### Schema mismatch and data addition failures These errors occur when data being added to an existing dataset does not match the dataset's current structure. #### Data addition failures (schema mismatch, type change, missing column) When you add data to a dataset—through a dataset refresh, data consolidation, or a manual addition—Mammoth compares the incoming data with the existing schema. What happens to a missing, renamed, or retyped column depends on the dataset's **If column type doesn't match** and column mapping settings: Mammoth can convert the column to text, convert incompatible values to null, or leave the dataset unchanged. See [Add or replace data](https://mammoth.io/docs/learn/data-library/add-or-replace-data/). The error notification for a failed addition includes the failure reason and the affected dataset name. To resolve a failed addition, reconcile the schema difference at the source so that the incoming data matches the dataset structure, or adjust the dataset's mapping settings, then retry the operation. #### Send to Dataset column errors When you use **Send to Dataset** to send processed data from one view to a destination dataset, the column mapping must align with the destination dataset's schema. If a mapped column no longer exists in either the source view or the destination dataset, the operation fails. To resolve, review the Send to Dataset configuration, confirm all mapped columns exist in both the source view and the destination dataset, update the mapping, and retry. ### Connection failures during automation runs When a Dataset Refresh automation fails because of a connection issue, the automation shows an **Error** status, and **Last run result** in its detail panel gives the reason. Mammoth does not automatically retry a failed run—this prevents cascading failures when the underlying issue is systemic. Fix the root cause, such as an expired credential, then trigger a run with **Run now** instead of waiting for the next scheduled run. If the automation is on a recurring schedule, it still runs at its next scheduled time regardless of the earlier failure, but that is the normal schedule continuing, not a retry of the failed run. When a single automation refreshes several datasets, each connection is validated independently. Partial success is possible—some datasets may refresh successfully while others fail. ### Network and firewall issues If connections are failing intermittently and authentication is confirmed valid, the issue may be network-related. Confirm that your database or service accepts connections on its port and that the Mammoth IP address shown in the connection form is allowed in your firewall configuration. Mammoth uses outbound HTTPS (port 443) for all service communications. Custom database ports are also supported: 1433 for SQL Server, 5432 for PostgreSQL, and 3306 for MySQL. SSH tunneling is available for secure enterprise database access (configurable per connector: proxy host/port and auth type). See [Network requirements](https://mammoth.io/docs/learn/connectors/network-requirements/). If you need Mammoth's outbound IP ranges added to an allowlist, or need SSH tunnel access configured, contact support. ### Rate limiting If a source system limits how often it accepts requests, refreshes may fail until the limit resets, with no automatic retry for that run—the same as any other automation failure. The automation runs again at its next scheduled time, or you can run it with **Run now** once the limit has reset. To reduce rate limit exposure, review automation schedules to avoid concentrating many refresh operations on the same source at the same time, and consolidate datasets where possible. ## What the Activity Log captures The Activity Log records changes made in a workspace or project and is useful for audit, compliance, and governance. It captures events such as: - Datasets, views, and other items being created, edited, renamed, or deleted - Data being added to a dataset, datasets being combined or replaced, and datasets being duplicated - Batches being suspended or un-suspended - Pipeline tasks being added, edited, renamed, or removed, and views being re-run - Connections being added, edited, or deleted - Automations being edited or updated - Retention policies and workspace membership changes, including users being invited to or removed from the workspace The Activity Log records changes, not errors, and it does not record the health of a Live Connection. The error scenarios covered in this guide are not logged there. They are surfaced through in-app error indicators and, for some failure types, notifications. Check the automation's status and **Last run result**, and the error shown in the interface. ## A note on webhook errors Webhook data received via POST/GET request is a separate ingestion mechanism and is not covered in this guide. If you are experiencing errors with webhook ingestion, contact Mammoth support. ## When to contact support Contact Mammoth support when errors persist after following the steps in this guide, or when you need assistance with IP address allow rules, SSH tunnel configuration, or enterprise authentication setup. When you contact support, include the connector type, the exact error message from the notification or error indicator, and a summary of the troubleshooting steps you've already tried. --- # Dashboard issues URL: https://mammoth.io/docs/learn/troubleshooting/dashboard-issues/ · Updated: 2026-11-02 Fix Mammoth dashboard problems: blank screens, stale data, failed AI generation, publishing limits, broken share links, layout glitches, and slow loading. This guide covers the most common problems you'll encounter with Mammoth dashboards—blank screens, stale data, AI generation failures, sharing errors, and mobile display issues—and gives the fix for each. ## Dashboard not loading (blank screen) A blank dashboard can mean several things. Work through this checklist in order: ### Step 1: Check platform status Visit . If there is an active incident affecting dashboards, wait for the incident to resolve. ### Step 2: Check View availability Every dashboard is connected to a View as its data source. If the underlying View has been deleted, the dashboard loses its data source and will show blank. To check: open the source project, navigate to the View the dashboard uses, and confirm it still exists. ### Step 3: Check your permissions Everyone in the dashboard's project has access to it, and people outside the project can be invited as viewers. If you were recently removed from the project or your role changed, the dashboard may no longer open for you. Contact your workspace admin to verify your project access. ### Step 4: Hard refresh the browser Press `Ctrl+Shift+R` (Windows/Linux) or `Cmd+Shift+R` (Mac) to bypass browser cache. If the dashboard loads after this, a stale cached state was the cause, so no further action is needed. ## Dashboard showing wrong or stale data ### How dashboard data refresh works A dashboard has a **draft** and a **published** version. New data from the dashboard's source Views comes into the draft when you sync, and viewers only see it once the draft is published. To get fresh data in your dashboard: 1. First ensure the underlying dataset and View are up to date. If the dataset is on a scheduled refresh (via an automation), wait for the refresh to complete, or trigger it manually. 2. Open the dashboard's **Sync settings** and click **Sync all sources**, or turn on **Sync automatically** so new rows come into the draft whenever the View's pipeline runs. 3. Publish the dashboard, or turn on **Publish new data automatically** so new data goes live as soon as it syncs. Layout and theme changes still wait for you to publish. > **What to do if viewers see stale data:** Check the Sync settings. If the draft is up to date but viewers still see old values, the dashboard has unpublished changes. Publish it. ### Dashboard still shows old data after publishing If the source View has current data and the dashboard is published, but it still shows old values, check whether the dashboard has a saved filter state that excludes current data. Open the dashboard filters and reset all filters to their defaults. ## AI dashboard generation failed or produced unexpected results ### Generation took too long Generation can take a while for wide or complex Views. **Fix:** Refresh the page and try again. If it keeps failing: - Reduce the number of columns in the source View. AI generation works best with focused Views - Break a wide View into multiple narrower Views - Simplify the prompt. Be specific about the few charts you want rather than asking for a complete analysis ### Generation produced wrong chart types or unexpected data The AI generates charts based on column names and data types in your View. If the output doesn't match your intent: 1. **Refine your prompt.** Be explicit: "Show me a line chart of revenue by month and a bar chart of units sold by product category" produces better results than "analyze my sales data." 2. **Check column naming.** Columns named `col1`, `field_3`, or other generic names confuse the AI. Rename them to meaningful names in your pipeline before creating the View. 3. **Check data types.** If a date column has been imported as text, the AI cannot create time-series charts from it. Fix the column type in your pipeline first. ## Sharing problems ### Can't find the share button Click **Publish & Share** in the editor toolbar, or open **Share** from the dashboard. You need edit access to the dashboard to publish or share it. ### Publishing limit reached Mammoth limits the number of **published** dashboards based on your plan: | Plan | Published dashboards | | --- | --- | | Free | 3 | | Starter | 25 | | Team | 100 | | Pro | Unlimited | When you reach the limit, Mammoth tells you that your plan's published-dashboard limit is reached. To resolve: either **Unpublish** an existing dashboard, or upgrade your plan. For plan upgrade options, contact [support@mammoth.io](mailto:support@mammoth.io). ### Shared link not working for recipients When a shared dashboard link fails for the recipient, check: | Access type | Common cause | Fix | | --- | --- | --- | | **Anyone with the link** (Public) | The dashboard was unpublished | Republish it. The same link works again | | **Sign-in required** (Authenticated) | Recipient isn't in the dashboard's project and wasn't invited | Invite them as a viewer, or change the access type to Anyone with the link | Older dashboards may also use password-protected access. If the password was changed after you shared the link, send recipients the new password. ## Layout and rendering problems ### Charts overlapping or misaligned If charts look uneven or misaligned: 1. Open the dashboard in edit mode 2. Use **Tidy up** to line up the tiles on the page (even widths, flush edges, one height per row), or **Edit layout** to drag and resize tiles 3. Save when the layout looks correct **Reset to auto layout** returns the page to the automatic layout. ### Dashboard theme not applying correctly If a dashboard looks visually inconsistent (fonts, colors, or spacing look wrong): 1. Open the dashboard in edit mode 2. Open the dashboard's design options and select the theme you want 3. Save the dashboard ### Mobile display issues Tablet and mobile layouts adapt automatically from the desktop layout, so build the layout on desktop and check how it reads on a smaller screen. **Tip for mobile-critical dashboards:** Place the most important charts at the top of the page, so they are the first thing a mobile viewer sees. ## Dashboard loads slowly If a dashboard takes a long time to load, the bottleneck is usually the underlying View query, not the dashboard itself. **Diagnose the View:** 1. Navigate to the source dataset in your project 2. Open the View the dashboard uses 3. Check the View's row count. Views with very large row counts are slower to query **Optimization strategies:** - Add filters to the View to reduce its row count before the dashboard queries it - Use aggregated Views (group and summarize data in the pipeline) rather than passing raw row-level data to dashboards - If the dashboard shows key metrics and aggregate charts, the View should contain aggregated data, not transaction-level rows ## Still not resolved? If none of the above resolved your issue, contact [support@mammoth.io](mailto:support@mammoth.io) with: - Your workspace name and dashboard name - The steps you took before the issue occurred - Any error messages displayed - A screenshot of the problem --- # Data quality issues URL: https://mammoth.io/docs/learn/troubleshooting/data-quality-issues/ · Updated: 2026-11-02 Read the Mammoth Data Quality score and its six dimensions, and fix duplicates, missing values, type mismatches, outliers, and inconsistent formatting. Mammoth can analyze a View and report quality issues before they affect your analysis. This guide explains how to interpret quality scores, understand what's wrong with your data, and apply the right fixes using Mammoth's built-in pipeline tools. ![Data Quality summary showing a Poor score of 44 out of 100, with completeness, critical issues and View Details](https://mammoth.io/docs/images/20260505_121226_DataQualityScoreindicatorinbottomstatus1.webp) ## How Mammoth measures data quality Mammoth uses the **DAMA six-dimension quality framework** to score your data across six dimensions. Each dimension is scored from 0–100%, and the overall quality score is a weighted average of the six. | Dimension | Weight | What it measures | | --- | --- | --- | | **Validity** | 25% | Share of columns without unexpected negative values, unexpected zeros, or future dates | | **Uniqueness** | 25% | Share of identifier columns whose values are unique | | **Completeness** | 20% | Share of columns without missing values | | **Consistency** | 15% | Share of text columns without case variants of the same value (such as `Active`, `ACTIVE`, `active`) | | **Accuracy** | 10% | Share of numeric columns without outliers | | **Timeliness** | 5% | How recent the newest date is compared with how fresh the data is expected to be | Dimensions are scored per column, not per row, so one problem column lowers a dimension's score by a share of the columns checked. ### Quality score thresholds | Score | Label | Meaning | | --- | --- | --- | | 95–100% | **Excellent** | Data is ready for analysis and reporting | | 80–94% | **Good** | Minor issues present; suitable for most analysis with awareness | | 60–79% | **Fair** | Meaningful issues that may affect analysis accuracy; review recommended | | Below 60% | **Poor** | Significant issues; analysis results may be unreliable | ## Viewing the data quality report 1. Open a View 2. Click **View Data Quality** to run the analysis 3. The report opens with these sections: - **Overview**—the Data Quality Score, the score for each dimension, and column completeness - **Issues and Monitoring**—the issues found, which columns are affected, and how each was detected - **Improvement Actions**—recommended fixes, each with an **Add to Pipeline** button (or **Add all to Pipeline**) ## Fixing common data quality problems ### Duplicate rows **Symptom:** The Uniqueness dimension shows a low score, or you see repeated rows when browsing data. **Cause:** Duplicates most commonly enter Mammoth data when: - A source system exports the same records multiple times - A scheduled refresh runs more than once before deduplication - Multiple source files are combined without deduplication **Fix in Mammoth pipeline:** 1. Add a **Remove Duplicate Rows** step after your data source 2. Under **Evaluate duplicates from**, choose which columns decide whether two rows are duplicates (e.g., transaction ID, or customer ID + date) 3. Apply the step—check the row count before and after to confirm duplicates were removed ### Missing values (nulls) **Symptom:** The Completeness dimension shows a low score. Issues and Monitoring lists the columns with missing values. **Cause:** Null values typically come from: - Source system records with optional fields left empty - Join operations where the right-side record has no match (left join nulls) - Import errors where certain cells were skipped **Fix options:** | Strategy | When to use | Pipeline step | | --- | --- | --- | | Replace nulls with a default value | Numeric fields where 0 is meaningful; text fields where a placeholder is acceptable | **Fill Missing Values**—choose the column and how to fill it | | Remove rows with nulls | Analysis requires complete records; null rows are not meaningful | **Conditional Filter**—keep only rows where each critical column has a value | | Leave nulls in place | Null genuinely means "not applicable" for this record | No action needed; document the null semantics in the dataset description | > **Best practice:** Before removing null rows, check what percentage of your data they represent. If more than 5–10% of rows would be removed, investigate the source system first—high null rates often indicate a data collection problem, not a Mammoth problem. ### Data type mismatches **Symptom:** Date columns show as text, or numeric columns contain strings, so sorting, filtering, and calculations behave unexpectedly. **Cause:** Type mismatches occur when source data doesn't match the expected format: - Dates formatted as text (e.g., `"January 15, 2024"` instead of `2024-01-15`) - Numeric fields with currency symbols or commas (e.g., `"$1,250.00"`) - Boolean fields imported as `"Yes"/"No"` strings instead of true/false **Fix in Mammoth pipeline:** 1. Add a **Convert Column Type** step 2. Select the column with the type mismatch 3. Choose the target type 4. For dates, specify the format the text is written in 5. For numeric columns with currency symbols: first add a **Find & Replace** step to strip the non-numeric characters, then convert ### Outliers **Symptom:** The Accuracy dimension flags outliers in numeric columns. Aggregate analysis shows averages distorted by extreme values. Accuracy never drops below 60%, because outliers need a person who knows the data to judge them. **Cause:** Outliers can be legitimate extreme values (a very large transaction) or data errors (a row with `99999` entered as a placeholder for missing data). **Fix options:** | Strategy | When to use | Pipeline step | | --- | --- | --- | | Remove outlier rows | Values are data entry errors or test data | **Conditional Filter**—keep rows where the column is below an upper bound (investigate to determine the appropriate threshold) | | Cap outlier values | Extreme values are real but should be limited for analysis | **Add Column** with a **Math Function**—cap values at a limit you choose | | Flag and retain | Outliers are real and meaningful but should be marked | **Add Column** with a **Conditional Filter** or **Math Function** to build a flag column, or keep the rows and filter in the dashboard | > **Before removing outliers:** Review the actual values to determine whether they are errors or genuine extremes. Removing valid outliers can make analysis misleading. Consult your data owner before discarding records. ### Inconsistent formatting **Symptom:** The Consistency dimension shows issues. Category columns have case variants of the same value (e.g., `Active`, `ACTIVE`, `active`). Other columns have variations such as `"US"`, `"USA"`, `"United States"`. **Fix in Mammoth pipeline:** 1. **Standardize text case:** Add a **Text Formatting** step and use **Change text case**—choose lower case, Capital Case, or UPPER CASE to normalize the column 2. **Standardize category values:** Add a **Find & Replace** step—replace `"USA"` and `"United States"` with `"US"` (repeat for each variant) 3. **Clean up whitespace:** Add a **Text Formatting** step with **Normalize whitespace** to remove extra spaces that cause values to not match ## Quality score is low but I don't know why If your quality score is below 80% and the dimension breakdown isn't immediately clear: 1. Open **Overview** and find the lowest-scoring dimension 2. Open **Issues and Monitoring** to see which columns are affected and how each issue was detected 3. Check the affected columns in your data to see examples of the issue 4. Open **Improvement Actions** for recommended fixes, and use **Add to Pipeline** to apply one ## Applying multiple fixes For datasets with multiple quality issues, apply fixes in this order for best results: 1. **Type fixes first**—fix type mismatches before anything else; many other issues (null counts, outlier detection) depend on the correct type being set 2. **Deduplication second**—remove duplicates before filling nulls, so you don't create artificial completeness 3. **Null handling third**—once duplicates are removed, assess which nulls to fill vs. remove 4. **Value standardization last**—clean up formatting and category values after the structural issues are resolved Review the Data Quality report again after each group of fixes to confirm scores are improving. ## Still not resolved? If data quality issues persist after applying fixes, or if the Data Quality Report shows issues you can't trace to the source: 1. Download a sample of the raw source data and compare it directly to what Mammoth imported 2. Check whether a recent pipeline change introduced the issue (review the pipeline steps) 3. Contact [support@mammoth.io](mailto:support@mammoth.io) with your workspace name, dataset name, and a description of the specific quality issue --- # Error messages reference URL: https://mammoth.io/docs/learn/troubleshooting/errors/ · Updated: 2026-11-02 Reference of common Mammoth errors and HTTP status codes (401, 403, 429), grouped by area, with the cause and fix for each. This reference covers the errors people most often run into in Mammoth, with the cause and fix for each. Where Mammoth shows a fixed message, the heading uses its exact text. Other headings describe the problem in plain words, because the wording on screen varies. Each entry lists common causes and steps to fix it. ## How to use this guide **Find your error**: Use Ctrl+F to search for the error text you're seeing, or scan the headings for the closest description. **Understand the Cause**: Each error explains why it happened, not just what went wrong. **Follow Solutions**: Try solutions in order—they're ranked from most common to advanced fixes. **Check the Activity Log**: The Activity Log records changes made in a project or workspace, such as edits, connection changes and pipeline re-runs. Use it to match an error to a recent change. ## Authentication errors ### Sign-in or API credentials rejected (401) **What it means**: Your sign-in credentials or API token are invalid, expired or missing, and the request is refused with HTTP status 401. **Common causes**: - Session expired after inactivity - Browser cleared cookies automatically - Password changed in another session - Multi-factor authentication code expired - API token missing or incorrect **Solutions**: 1. **Sign out and sign back in** - Clears any corrupted session data 2. **Clear browser cookies** for mammoth.io - Remove cached authentication 3. **Check your MFA code** - Ensure the time on your authenticator app is synchronized 4. **Reset password** if you can't remember current password 5. **For API users**: Verify that your API token is present in the request and still valid If you're getting frequent session timeouts, check if your company's network has aggressive cookie policies that might be clearing authentication tokens. ### Permission denied (403) **What it means**: You're signed in but don't have permission for this action, and the request is refused with HTTP status 403. Mammoth can report this as "User lacks permission to perform given action". **Common causes**: - Your role doesn't allow the action (for example, a Project Editor trying to delete the project) - Project access was revoked - Workspace membership removed - Feature requires higher subscription tier **Solutions**: 1. **Check your role** with a project or workspace admin 2. **Ask an admin** to grant the permissions you need 3. **Review the Activity Log** for recent changes to your workspace membership 4. **Verify feature availability** in your current plan 5. **Switch to correct workspace** if you have multiple memberships ### Connection authentication expired **What it means**: Credentials for your external data source have expired or are no longer accepted. **Common causes**: - OAuth tokens expired - Password changed in source system - API key rotated by external service - SAML/SSO session timeout **Solutions**: 1. **Open the connection** and re-enter or reauthorize your current credentials 2. **Test the connection** before running automations 3. **Note the expiration date** of tokens and keys for future renewal planning ## Schema and column errors When you add data to an existing dataset, Mammoth lines up columns by name. Extra columns in the new data are added, columns missing from the new data are filled with nulls, and columns whose data types differ trigger a column-mapping step. ### New data can't be combined because the schemas don't match **What it means**: The new data can't be combined with the existing dataset because its schema doesn't match. Mammoth reports this as `Datasources with mismatching schemas cannot be appended`. **Common causes**: - File template changed without updating Mammoth - Column accidentally deleted or renamed during export - Wrong file uploaded (different source) **Solutions**: 1. **Compare the file to a previous upload** - Check which columns are missing, renamed or new 2. **Re-export from the source** ensuring all columns are included and named as before 3. **Use Replace instead of Combine** if the new file is meant to overwrite the dataset 4. **Create a new dataset** if the file structure has fundamentally changed > **Share a template with data suppliers** > > Create a master file template with sample data and share it with all data suppliers. Include column names, data types, and example values to prevent schema mismatches. ### Some columns were converted to text **What it means**: A Numeric or Date column contained values that couldn't be read as that type, so Mammoth converted the column to text. The message reads "Some of the Numeric or Date columns had error values, these columns have been converted to text columns". **Examples**: - A Number column with "N/A" in some rows - A Date column with "TBD" in some rows **Solutions**: 1. **Review source data** for data quality issues 2. **Clean the data before upload** - Remove or replace invalid values 3. **Use the Convert Column Type task** in the pipeline to convert the column back once the values are clean 4. **Add data validation** in the source system to prevent future issues **Common data type fixes**: ```plaintext Revenue column with "N/A" → Use Fill Missing Values or Conditional Filter to handle the rows Date column with "TBD" → Use Conditional Filter → Remove invalid rows ID column with leading zeros → Keep as Text type, don't convert to Number ``` ## Transformation errors ### A calculation fails or returns blanks because of empty values **What it means**: A mathematical operation or type conversion ran into empty/missing data. **Common examples**: - A Math Function on a column that contains blanks - A Convert Column Type on a column with empty cells **Solutions**: 1. **Add a Fill Missing Values task** before mathematical operations 2. **Use Conditional Filter** to remove null rows before calculation 3. **Check data quality** with the Data Quality Report to identify null patterns 4. **Handle nulls in the source system** before export **Fill Missing Values methods**: - **Directional**: Copy the closest value above or below in the column - **Smart**: Predict each empty cell from the rest of the data ### "Invalid date format" **What it means**: Date text doesn't match the expected format pattern. A Conditional Filter on a date column shows this as "Invalid date format for [value] in condition". **Common format issues**: - Mixed formats: "01/15/2024" and "2024-01-15" in same column - Ambiguous formats: "01/02/2024" (Jan 2 or Feb 1?) - Non-date text: "Next Week", "TBD", "Q4 2024" - Time zones: Dates with different timezone indicators **Solutions**: 1. **Standardize format in source** - Export with consistent date format 2. **Use "Convert Column Type"** with specific format pattern 3. **Handle multiple formats** with conditional transformation 4. **Document expected format** for data suppliers 5. **Filter out invalid dates** before date operations **Date format examples**: ```plaintext Excel Export → Use "Short Date" format: MM/DD/YYYY Database Export → Use ISO format: YYYY-MM-DD Manual Entry → Provide template: "01/31/2024" ``` ### A join returns no matching rows **What it means**: The join keys in your two datasets don't have any matching values. **Common causes**: - Case sensitivity: "CUSTOMER001" vs "customer001" - Whitespace: "ABC " vs "ABC" (trailing space) - Data type mismatch: Text "123" vs Number 123 - One dataset has no matching records **Solutions**: 1. **Preview join keys** from both datasets side by side 2. **Apply text formatting** (Trim, Upper Case) before join 3. **Convert data types** to match (both text or both number) 4. **Use a Left join** to keep every row of the current view and see which records don't match 5. **Check for typos** in join key values **Debugging joins**: ```plaintext 1. Create a View from Dataset A, select join column only 2. Create a View from Dataset B, select join column only 3. Compare distinct values between both Views 4. Identify formatting differences 5. Apply standardization before attempting join ``` ## File upload errors ### The file is too large **What it means**: Your file is larger than the upload limit. A file upload can be up to 50 MB on every plan, and a larger request is refused. See [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/). **Solutions**: 1. **Split the file into smaller chunks** - Upload separately then combine 2. **Filter data in the source system** - Export only needed columns and rows 3. **Remove unnecessary columns** before export 4. **Use a connection to the source** instead of a file upload for large datasets > **Large recurring files** > > For recurring large files, connect to the source system directly instead of uploading files. ### Unsupported file type **What it means**: The file type you uploaded isn't supported by Mammoth. The message reads "Unsupported file type". **Supported file types for upload**: - **Text and delimited files**: `.txt`, `.csv`, `.tsv`, `.psv` - **Excel**: `.xls`, `.xlsx` - **XML**: `.xml` - **Archives and compressed files**: `.zip`, `.gz`, `.bz2`, `.tar`, `.7z` - **PDF and image files**: `.pdf`, `.tiff`, `.tif`, `.jpeg`, `.jpg`, `.png`, `.heic`, `.heif`, `.webp` (availability depends on your plan and workspace settings) Adding or replacing data in a dataset with a ZIP file that contains multiple items isn't allowed. **Solutions**: 1. **Convert to CSV** - Universal format that works everywhere 2. **Export as Excel** from your source application 3. **Check that the file extension** matches the actual content 4. **Re-download the file** if it might be corrupted. Mammoth reports a damaged file as "File seems to be corrupt" and an empty file as "File is empty" 5. **Use a data connector** for sources that don't export to a supported file type, such as JSON or Parquet ### Characters look wrong after upload **What it means**: The file uses a character encoding other than the one Mammoth expects, so special characters appear garbled. **Common encoding issues**: - Latin-1 encoding from legacy systems - Windows-1252 with special characters - Excel exports with international characters **Solutions**: 1. **Use the "CSV UTF-8" option** when exporting from Excel 2. **Convert the encoding** in a text editor (Notepad++, VS Code) 3. **Re-export from the source system** with a UTF-8 setting 4. **Contact support** for assistance with specific encoding **Excel UTF-8 export**: ```plaintext 1. File → Save As 2. Choose "CSV UTF-8 (Comma delimited)" 3. Click Save 4. Upload the new .csv file to Mammoth ``` ## Automation errors ### A Dataset Refresh can't connect to the source **What it means**: A scheduled data refresh couldn't connect to your data source. **Common causes**: - Connection authentication expired - Source system temporarily down - Network/VPN connectivity issues - Source system rate limiting requests **Solutions**: 1. **Check the connection** and confirm its credentials are still valid 2. **Test the connection manually** outside of the automation 3. **Reconnect with current credentials** if expired 4. **Verify source system status** - Check if the system is online 5. **Review the Activity Log** for recent changes to the connection or automation ### A Data Consolidation fails on a new file **What it means**: A file added to your automated consolidation doesn't match the existing dataset's schema. **Common scenarios**: - Supplier changed file format without notice - Wrong file uploaded to monitored folder - Column names changed - Required columns missing from new file **Solutions**: 1. **Review the failing file** - Download and inspect structure 2. **Compare to file template** you provided to suppliers 3. **Contact data supplier** about format changes 4. **Update the pipeline or dataset** if the change is permanent 5. **Provide a corrected template** to prevent future mismatches **Preventing consolidation errors**: - Document exact schema requirements - Provide sample files with correct format - Set up validation in supplier systems ### A pipeline task fails **What it means**: A specific transformation task in your pipeline encountered an error and stopped execution. **Common task failures**: - **Conditional Filter**: Invalid filter criteria - **Join**: No matching records between datasets - **Math Function**: Division by zero or null values - **Find & Replace**: Invalid patterns **Solutions**: 1. **Turn on Draft mode** to test pipeline changes safely 2. **Preview the pipeline step by step** up to the failing task 3. **Inspect the data before the failing task** to understand the input 4. **Review the task configuration** for errors **Debugging pipeline failures**: ```plaintext 1. Open the View with the failed pipeline 2. Find the task that shows the error 3. Review the error message and the data feeding the task 4. Edit the task configuration 5. Check the result in the preview before applying changes ``` ## Performance errors ### An operation times out **What it means**: Your operation took longer than the allowed time and was cancelled. **Common causes**: - Processing very large datasets - Complex pipelines with many transformation tasks - Network latency during upload/download - Server load during peak usage times **Solutions**: 1. **Filter dataset to smaller subset** for testing 2. **Simplify pipeline** - Break into multiple smaller pipelines 3. **Use Draft mode** to batch several pipeline changes before running them 4. **Run during off-peak hours** if server load is a factor 5. **Contact support** if timeouts persist with normal-sized data **Performance optimization tips**: - Filter early in pipeline to reduce data volume - Combine similar operations (multiple filters → single conditional filter) - Use the Top/Bottom Filter or Limit Rows task for sampling large datasets - Process data incrementally rather than all at once ### "Rate limit exceeded." (429) **What it means**: You've sent too many API requests in the current one-minute window. The API answers with HTTP status 429, the message "Rate limit exceeded." and a `Retry-After: 60` header. **Solutions**: 1. **Slow down request frequency** - Add delays between operations 2. **Batch operations** instead of individual API calls 3. **Wait for the time in the `Retry-After` header** (60 seconds), then try again 4. **Honour `Retry-After`** in API integrations before retrying 5. **Contact support** if you keep hitting the limit with normal usage **API rate limit handling**: ```python import time import requests def api_call_with_retry(url, data, max_retries=3): for attempt in range(max_retries): response = requests.post(url, json=data) if response.status_code != 429: return response # Wait as long as the server asks (60 seconds by default) wait_time = int(response.headers.get("Retry-After", 60)) time.sleep(wait_time) return response # Final attempt ``` ## Dashboard errors ### A dashboard can't load its data **What it means**: The dashboard can't access the underlying dataset or View. **Common causes**: - Dataset or View was deleted or moved - View permissions changed - Project access revoked - Automation failure preventing data updates **Solutions**: 1. **Verify dataset exists** in original project location 2. **Check project access permissions** - You may have lost access 3. **Review the Activity Log** for dataset deletions or moves 4. **Recreate the dashboard** from a current View if the original is permanently gone ### A chart doesn't display **What it means**: The dashboard can't display a specific chart or visualization. When a column a chart uses has been removed from the View, the tile reports that the column "is no longer available". **Common causes**: - A column used by the chart was renamed or removed in the View - Incompatible data for the selected chart (text data in a line chart) - Browser memory limitations - Invalid chart configuration **Solutions**: 1. **Check the View** for renamed or removed columns, and restore them or rebuild the chart 2. **Filter the data** to a smaller date range or subset 3. **Change the chart type** - Use a table for high-cardinality data 4. **Simplify the visualization** - Fewer data series or dimensions 5. **Refresh the browser** to clear memory, then clear the browser cache if the problem persists ## Error prevention best practices ### Practice 1: Use templates and documentation **Create standardized templates**: - File format templates for data suppliers - Column naming conventions - Data type specifications - Example data for clarity **Document requirements**: - Required vs optional columns - Expected data formats - The 50 MB file size limit (see [limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/)) - Update frequencies ### Practice 2: Validate early and often **Before uploading large files**: 1. Test with small sample first (100 rows) 2. Use Data Quality Report to check completeness 3. Verify schema matches previous uploads 4. Review for obvious data quality issues **Before building complex pipelines**: 1. Start with simple transformations 2. Test each step with Preview 3. Use Draft mode to try changes before applying them 4. Save working versions before major changes ### Practice 3: Monitor connection health **Set up monitoring**: - Check your connections weekly - Document authentication expiration dates - Test connections before important automations - Set calendar reminders for credential renewals **Document connection details**: - Who owns/maintains each connection - Authentication renewal process - Backup contact information - Emergency procedures ### Practice 4: Review Activity Log regularly **Regular Activity Log review**: - Look for unexpected edits, connection changes and pipeline re-runs - Monitor user activity **Use the Activity Log for troubleshooting**: - Filter by date range or event - Share relevant entries with support for complex issues - Correlate errors with recent changes > **Activity Log filters** > > Use the Activity Log filters to narrow the log to a date range and see which change happened just before a problem started. ## When to contact support ### Contact support immediately for - 500 Internal Server Error - System-level issues - Data corruption - Incorrect results after transformation - Security concerns - Unauthorized access or permission issues - Billing problems - Incorrect charges or plan questions ### Contact support after trying solutions for - Persistent timeouts - Even with optimized operations - Connection issues - After verifying credentials and network - Repeated automation failures - Same error multiple times - Performance degradation - Sudden slowness across all operations ### Include in your support request 1. Exact error message - Copy/paste the complete text 2. Steps to reproduce - What you were doing when error occurred 3. Activity Log entries - Relevant timestamps and recent changes 4. Browser/system info - Version, extensions, network setup 5. Data examples - Sample files or schema (remove sensitive data) ## Quick error lookup - Can't sign in: see [Authentication errors](#authentication-errors) - File won't upload: see [File upload errors](#file-upload-errors) - Pipeline fails: see [Transformation errors](#transformation-errors) - Columns or schema don't match: see [Schema and column errors](#schema-and-column-errors) - Slow performance: see [Performance errors](#performance-errors) - Dashboard broken: see [Dashboard errors](#dashboard-errors) - Automation fails: see [Automation errors](#automation-errors) - API returning errors: see [Authentication errors](#authentication-errors) for 401 and 403 and [Performance errors](#performance-errors) for 429 --- # Troubleshooting URL: https://mammoth.io/docs/learn/troubleshooting/ · Updated: 2026-11-02 Find the right Mammoth troubleshooting guide by symptom, run a quick diagnostic checklist, learn what the Activity Log records, and contact support. This section covers common Mammoth problems with a symptom, cause, and fix for each. It is for anyone who builds pipelines, connections, automations, or dashboards. To start, find your symptom in the table below. ## How to use this section Each guide focuses on a specific problem area. Start with the guide that matches your symptom: | I'm seeing… | Start here | | --- | --- | | Dashboard not loading, wrong data, chart errors | [Dashboard issues](https://mammoth.io/docs/learn/troubleshooting/dashboard-issues/) | | Data looks wrong, duplicates, null values, quality score low | [Data quality issues](https://mammoth.io/docs/learn/troubleshooting/data-quality-issues/) | | A specific error message or HTTP status code | [Error messages reference](https://mammoth.io/docs/learn/troubleshooting/errors/) | | Slow queries, pipelines timing out, reports taking too long | [Performance issues](https://mammoth.io/docs/learn/troubleshooting/performance-issues/) | | Transformation step failing, pipeline not producing expected output | [Transformation errors](https://mammoth.io/docs/learn/troubleshooting/transformation-errors/) | | Connection authentication failed, data not refreshing | [Connection troubleshooting](https://mammoth.io/docs/learn/troubleshooting/connection-troubleshooting/) | ## Quick diagnostic checklist Before diving into a specific guide, run through this checklist—it resolves a large fraction of common issues: 1. **Check platform status**—Visit to confirm there are no active incidents or degraded services. 2. **Check the Activity Log**—Open the **Activity Log** for your workspace or project to see who changed what and when. It records changes to your data and configuration, not errors. See [What the Activity Log captures](#what-the-activity-log-captures) below for scope details. 3. **Look for error indicators**—Pipeline errors appear as a **This pipeline has errors** banner on the pipeline, and a failed automation shows an **Error** status with the failure in **Last run result**. Neither appears in the Activity Log. 4. **Try a hard refresh**—Press `Ctrl+Shift+R` (Windows/Linux) or `Cmd+Shift+R` (Mac) to bypass browser cache. 5. **Check your permissions**—Confirm you have the correct role for the action you're trying to take (Project Admin or Project Editor). ## What the Activity Log captures The Activity Log is your audit trail for **changes**—it is not an error log. **The Activity Log DOES capture:** - Dataset create, edit, rename, and delete events - Combine, replace, and duplicate dataset operations - Pipeline task changes - Connection changes - Automation edits and batch suspends - Workspace invitations **The Activity Log does NOT capture:** - Connection authentication failures (expired tokens, invalid credentials) - Pipeline task-level errors (individual task failures within a pipeline) - Schema mismatch errors during data import For these errors, check the **error indicators** shown directly in the interface on the affected connection, pipeline, or automation. ## Troubleshooting guides ### [Dashboard issues](https://mammoth.io/docs/learn/troubleshooting/dashboard-issues/) Diagnose blank dashboards, charts showing wrong data, AI generation failures, sharing permission errors, and mobile display problems. ### [Data quality issues](https://mammoth.io/docs/learn/troubleshooting/data-quality-issues/) Understand Mammoth's six-dimension quality framework, interpret quality scores, and fix the most common data quality problems: duplicates, missing values, outliers, and type mismatches. ### [Error messages reference](https://mammoth.io/docs/learn/troubleshooting/errors/) A reference for the errors and HTTP status codes Mammoth returns, with the cause and fix for each. ### [Performance issues](https://mammoth.io/docs/learn/troubleshooting/performance-issues/) Diagnose slow dashboards, slow transformation pipelines, and query timeouts. Includes optimization strategies for large datasets and scheduled automations. ### [Transformation errors](https://mammoth.io/docs/learn/troubleshooting/transformation-errors/) Fix common errors in visual pipeline transformations: type mismatches, missing columns, math expression errors, and join key conflicts. ### [Connection troubleshooting](https://mammoth.io/docs/learn/troubleshooting/connection-troubleshooting/) Resolve authentication failures, expired credentials, network connectivity issues, and schema mismatch errors for your connections. Hitting a size, row, or schedule limit? See [Limits and quotas](https://mammoth.io/docs/learn/limits-and-quotas/). For common how-to questions, see the [FAQ](https://mammoth.io/docs/learn/faq/). ## Emergency quick reference If you're in a critical situation: | Situation | Action | | --- | --- | | Platform outage or degraded service | Check | | Data emergency—need immediate help | Email [support@mammoth.io](mailto:support@mammoth.io) with your workspace ID and a description | | Authentication locked out | Email [support@mammoth.io](mailto:support@mammoth.io)—include your user email and workspace name | | Data corruption suspected | Suspend your scheduled automations immediately, then contact [support@mammoth.io](mailto:support@mammoth.io) | > **Note on failed automations:** Fix the root cause of a data or authentication failure first, then use **Run now** on the automation to re-run it. ## Contacting support If you've worked through the relevant guide and still can't resolve the issue: - **Email:** [support@mammoth.io](mailto:support@mammoth.io) - **What to include:** Your workspace name, the feature area (connection, pipeline, dashboard), steps to reproduce the issue, and any error messages you've seen. ![In-app support chat window opened from the sidebar, with a Send us a message button](https://mammoth.io/docs/images/20260428_141126_Screenshot2026-04-27110606.webp) ## Automation scheduling How often an automation can run depends on your plan. See [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/) for the frequency options, and contact [support@mammoth.io](mailto:support@mammoth.io) if your workflow needs a more frequent schedule than your plan allows. --- # Performance issues URL: https://mammoth.io/docs/learn/troubleshooting/performance-issues/ · Updated: 2026-11-02 Diagnose slow Mammoth pipelines, dashboards, exports, and scheduled automations, and fix large-dataset and over-broad schedule problems. Performance problems in Mammoth almost always trace back to one of three root causes: large unfiltered datasets being queried inefficiently, pipeline steps that process more data than necessary, or over-broad scheduled automations. This guide helps you identify the source and fix it. ## Quick diagnostic: What's slow? | Symptom | Most likely cause | Go to | | --- | --- | --- | | Dashboard takes a long time to load | Source View is too large or unoptimized | [Slow dashboard loading](#slow-dashboard-loading) | | Pipeline times out or runs for a long time | Large dataset + expensive operations | [Slow pipelines](#slow-transformation-pipelines) | | Scheduled refresh takes hours | Too many datasets refreshing simultaneously | [Automation performance](#automation-and-scheduled-refresh-performance) | | AI dashboard generation is slow | Wide Views or a complex prompt | [AI generation timing](#ai-dashboard-generation-timing) | | Export to BigQuery or SFTP is slow | Export volume or destination configuration | [Slow exports](#slow-exports) | ## Slow dashboard loading ### Understand what makes dashboards slow Dashboards load data by querying the underlying View at render time. The dashboard rendering itself is fast—the bottleneck is almost always the View query. **What makes a View query slow:** - The View is connected to a large dataset (millions of rows) without aggregation - The View applies complex multi-step pipelines that run at query time - Multiple charts on the dashboard each trigger separate View queries ### Step 1: Check view row count 1. Open the source dataset in your project 2. Navigate to the View your dashboard uses 3. Note the row count shown at the bottom of the View The more rows the View holds, the longer each chart query takes. Views with millions of rows and no aggregation are the most likely to be slow. ### Step 2: Aggregate before the view For dashboards showing KPIs, totals, and summary charts, the View should contain **aggregated data**, not row-level records. **Pattern:** Add a **Group & Pivot** task at the end of your pipeline that summarizes data to the grain your dashboard needs. If your dashboard shows monthly revenue by region, the View should have one row per month-region combination—not one row per transaction. ### Step 3: Pre-filter the view Add a **Conditional Filter** task to the pipeline before creating the View, limiting data to the time window or subset relevant to your dashboard. Example: If your dashboard shows the last 12 months of sales, add a date filter to the pipeline so the View only contains the last 12 months—not all historical records. ### Step 4: Limit chart count per dashboard Each chart on a dashboard triggers a query against the View. A dashboard with 20 charts on a 500,000-row View will load noticeably slower than one with 6 charts on the same View. **Recommendation:** Break large dashboards into multiple focused dashboards (e.g., "Revenue Overview" and "Product Performance") rather than building a single all-in-one dashboard. This also improves readability. ## Slow transformation pipelines ### Identify the slow step Use **Preview Data at this Task** on each task in your pipeline to see the row count at that point, and look for: - Tasks where row counts are unexpectedly high (a filter that should reduce rows but doesn't) - Tasks that work across the whole dataset (joins and group & pivot on large datasets) - Math Function columns with complex calculations applied across millions of rows ### Fix the slow step Once you know which step is slow, apply the matching technique from the [Performance guide](https://mammoth.io/docs/learn/performance/): - Row counts that stay high: move **Conditional Filter** tasks as early as possible, ideally right after the data source - A slow Join: check whether **Lookup** is enough, and whether the join key has duplicates - Many unused columns: add a **Remove Column** task right after the source - Heavy rebuilds while you edit: turn on Draft mode See [Pipeline optimization](https://mammoth.io/docs/learn/performance/pipeline-optimization/) for the full guidance on ordering tasks. ## Automation and scheduled refresh performance ### Understanding automation scheduling How often an automation can run depends on your plan, and the units you can choose are listed in the schedule editor. If your workflow needs more frequent refreshes than your plan allows, contact [support@mammoth.io](mailto:support@mammoth.io) to discuss options. See [Scheduling](https://mammoth.io/docs/learn/automations/scheduling/) for the frequency options and plan limits. ### Staggering scheduled refreshes If multiple large datasets are scheduled to refresh simultaneously (e.g., all at midnight), they can compete for resources and each may run slower. Stagger refresh times between large datasets. **To change an automation schedule:** 1. Open the **Automations** tab in the Data Library 2. Find the automation and open it 3. Edit the schedule 4. Save the automation ### Automation taking longer than expected If a scheduled automation is taking significantly longer than previous runs: 1. **Check if the source dataset has grown significantly.** A much larger dataset takes longer to refresh. 2. **Check for downstream pipeline complexity.** If the pipeline was edited recently, a new task may be processing the full dataset in a slow way. 3. **Check whether other automations are running simultaneously** and competing for resources (see staggering above). > **Reminder:** If an automation fails, open it, read **Last run result**, and fix the root cause. Then use **Run now** to re-run it. ## AI dashboard generation timing AI dashboard generation takes a short while, because the AI reads your View's schema and data before building charts. If generation seems stuck: 1. Refresh the page and try again 2. If it keeps happening, simplify the prompt and reduce the number of columns in the source View. Narrow Views with a few focused columns generate faster than wide Views with many columns ## Slow exports ### Export to cloud destinations (BigQuery, SFTP) Export speed depends on: - **Volume being exported**—large datasets with millions of rows take longer - **Network throughput** between Mammoth and the destination - **Destination write throughput**—some cloud warehouse configurations have write limits **To improve export performance:** - Filter the dataset before exporting—only export the rows the destination actually needs - For incremental data, add a date filter to export only new or changed rows since the last export, rather than full table refreshes - For SFTP destinations, verify that the SFTP server is not the bottleneck (check server capacity and available disk space) ## Large datasets For guidance by dataset size, see [Dataset size guidance](https://mammoth.io/docs/learn/performance/#dataset-size-guidance) in the Performance guide. ## Still not resolved? If you've applied these optimizations and performance is still unacceptable: 1. Check **Monitor**: the Running tab shows whether a task is **Stuck**, and Needs Attention lists failed runs. 2. Review Join steps—check whether the join key has duplicates (fan-out multiplies rows significantly). 3. Contact [support@mammoth.io](mailto:support@mammoth.io) with: - Your workspace name and dataset name - The pipeline ID, so the support team can inspect server-side execution logs - Approximate row count and column count - The specific operation that's slow (dashboard load, pipeline run, export, automation) - How long the operation takes vs. how long you'd expect --- # Transformation errors URL: https://mammoth.io/docs/learn/troubleshooting/transformation-errors/ · Updated: 2026-11-02 Fix Mammoth pipeline transformation errors: missing columns, type mismatches, math expression and join problems, and use Data Check gates to prevent them. Pipeline transformation errors occur when a task can't process the data it receives—usually because column names changed, data types are wrong, or a math expression references something that no longer exists. This guide covers the common transformation problems and how to fix them. ## How to read a pipeline error When a task in a pipeline has an error, the pipeline shows a **This pipeline has errors** banner with the message **Fix the failing tasks to continue**. When you add or edit a task and the pipeline ends up with errors, Mammoth also tells you: **Added task, but pipeline has errors** or **Edited task, but pipeline has errors**. ![Pipeline panel with the red This pipeline has errors banner, the message Fix the failing tasks to continue, and a failing Join task outlined in red with its error message and Delete and Fix error buttons](https://mammoth.io/docs/images/20261009_100706_PipelineHasErrorsBanner.webp) To find the cause: 1. Find the failing task in the pipeline 2. Open it and read the column or setting it references 3. Compare that with the columns available at that point in the pipeline Always start debugging at the first failing task. Later tasks often fail only because an earlier one did. ## A task references a missing column **What it means:** A task uses a column that no longer exists at that point in the pipeline. **Common causes:** - A column was renamed in an earlier step, but a later task still uses the old name - A **Remove Column** task removed a column needed downstream - A source dataset was refreshed with a schema change (a column was renamed or dropped in the source) **How to fix:** 1. Open the failing task 2. Note which column it uses 3. Look back through the pipeline to find where that column was last present 4. If the column was renamed, update the failing task to use the new name 5. If the column was removed unintentionally, delete or reconfigure the Remove Column task that removed it ## Column type problems **What it means:** A task received a column with a data type it can't process. The most common case is a numeric operation applied to a text column, or a date operation applied to a column that holds text. **Common causes:** - A date column was imported as text, so sort, filter, and aggregation on it give wrong results - A number column contains text values (such as `N/A`) that prevent numeric processing - A calculation uses a column that wasn't yet converted to numeric **How to fix:** 1. Check the type of the column in the failing task 2. Add a **Convert Column Type** task before the failing task 3. Convert the column to the type the task needs. Clean text columns first (remove symbols, handle non-numeric values), then convert ![Convert Column Type panel with a text column selected, the Date type chosen, Format Output set to Universal, and the date format list open showing YYYY/MM/DD and YYYY-MM-DD options](https://mammoth.io/docs/images/20261009_100706_ConvertColumnTypeDateFormat.webp) ## Math Function expression errors **What it means:** A **Math Function** task contains an expression that can't be evaluated. The expression editor tells you what is wrong. Common messages include: | Message | What to check | | --- | --- | | **Column {name} is missing** | The expression names a column that doesn't exist at this step. Check for typos and for columns renamed or removed in earlier steps | | **not a numeric column** or **Only numeric columns allowed** | A column in the expression is text or a date. Convert it with **Convert Column Type** first | | **Empty expression** | Enter an expression | | **Syntax error: unmatched brackets** | Make sure every opening bracket has a closing one | | **Expected an operator {operators} before {token}** | Two values or columns are next to each other with no operator between them | | **Expression can not begin with * or /** or **Expression can not end with any of ...** | Add the missing value at the start or end of the expression | | **Invalid arguments for {token}** or **Function {token} takes exactly 1 argument** | Check the number of arguments the function needs | Division by zero depends on your data. If a denominator can be zero, filter those rows out first with a **Conditional Filter**, or handle them in a separate flow. ## Join step issues ### Join returning zero rows A Join that returns no matching rows almost always means the key values don't match between the two datasets. **Common causes:** - Different formatting: one dataset has `US` and the other has `United States` for the same country - Trailing whitespace: `New York ` doesn't match `New York` - Different case: `APPLE` and `apple` may not match - Different types: joining a text column to a number column **How to diagnose:** 1. Check the **Join type**. An **Inner** join drops rows from the current view that have no match, while a **Left** join keeps them with empty values in the joined columns 2. Use **Preview Data at this Task** to look at the key values on both sides 3. Compare a sample of the keys to spot the mismatch **How to fix:** - **Whitespace:** Add a **Text Formatting** task with **Normalize whitespace** to both sides before joining - **Case:** Add a **Text Formatting** task with **Change text case** to both sides before joining - **Value variation:** Add a **Find & Replace** task to standardize values on both sides - **Type mismatch:** Add a **Convert Column Type** task to match types before joining ### Join returning too many rows Mammoth warns you with **Key column(s) have non-unique values** when the key columns of a joined View contain duplicates, because non-unique key values on a joined table result in duplicate rows. Every row on the left matches multiple rows on the right. A Join that would produce more than 100,000 rows and more than five times the larger input is rejected instead of running. The Join task shows **Runtime error. Contact support for help.**, and the full message reports that the row count would rise to a very large value. ![Failing Join task outlined in red showing the runtime error and the Key column(s) have non-unique values warning with a More details link, above Delete and Fix error buttons](https://mammoth.io/docs/images/20261009_100706_JoinRowCountError.webp) **How to fix:** - Switch to **Lookup** if you only need one matching value for each row - Remove duplicates from the right-side dataset first, using **Remove Duplicate Rows** on the join key column - Use **Group & Pivot** to summarize the right-side dataset to the level you need before joining ## Group & Pivot issues ### Aggregation on a non-numeric column Numeric aggregations such as sum and average need a numeric column. If a column holds numbers as text, add a **Convert Column Type** task before **Group & Pivot**. ### Unexpected empty group If **Group & Pivot** produces an empty group for a grouping column, the source data has empty values in that column. **Decision:** Either filter out those rows before grouping (if empty records aren't meaningful), or accept the group and handle it in downstream steps. ## Conditional Filter not removing expected rows If a **Conditional Filter** isn't filtering as expected: 1. **Check the condition logic.** Review whether your conditions need to all be true or only one of them. 2. **Check data types.** Filtering numbers stored as text produces unexpected results. Convert the column type first. 3. **Check for empty values.** A condition such as `status = "active"` excludes both non-active rows and rows where status is empty. If you want to keep empty rows, add a condition for them. ## Pipeline ran successfully but output looks wrong If a pipeline runs without errors but the output data is wrong: 1. **Step through the pipeline.** Use **Preview Data at this Task** on each task to see the data at that point. Compare each task's output to what you expect to find which task introduced the wrong data. 2. **Check task ordering.** Tasks apply in sequence—a Conditional Filter after a Join applies to the joined output, not to the individual datasets before joining. Reorder tasks if the sequence is wrong. 3. **Check your expressions.** If a Math Function produces unexpected values, calculate the expected result by hand for a few rows and compare. ## Pipeline error after source schema change If a pipeline that previously worked starts failing after a scheduled data refresh, the source dataset's schema likely changed: - A column was renamed in the source system - A column was dropped from the source **How to fix:** 1. Open the pipeline and look for the failing tasks 2. Each failing task uses a column that no longer exists under that name 3. Update the column references to match the new schema 4. If the change was unintentional (a source system changed something without notice), contact your data source owner to restore the previous schema **Error-resistant patterns**: - Filter early to reduce dataset size and complexity - Validate data types before calculations - Handle empty values explicitly (don't assume they won't exist) - Use conditional logic to route problematic data separately > **Pipeline Architecture** > > Create separate error handling flows for problematic data, like this biotech customer: "Whenever an error is detected, it goes through another flow and gets emailed back to that group for correction." ### Pipeline testing strategy **Unit testing**: Test individual transformations with known data - Use small, controlled datasets - Include edge cases (empty values, duplicates, extremes) - Check the result of each task with **Preview Data at this Task** **Integration testing**: Test the complete pipeline end to end - Use realistic data volumes - Include upstream data variations - Use **Draft mode** to queue tasks and review them before they take effect **Ongoing monitoring**: Add quality checkpoints - Add a **Data Check** task at key points. It runs automated data quality checks on the pipeline output and can either halt the pipeline or warn and continue, and you can choose who is notified - Compare row counts at key pipeline stages - Review the Data Quality report after changes ## Common error scenarios and solutions ### Date format standardization error **Scenario**: A reporting pipeline gives wrong results because dates arrive in inconsistent formats from different systems. **Symptoms**: - Date columns are treated as text - Sorting or date calculations give wrong results - Some values are not valid dates, such as `2024-13-01` or `Feb 30 2024` **Resolution steps**: 1. **Identify the issue**: Check the column type and review the Data Quality report 2. **Review the data**: Use Explore cards to see the mix of formats 3. **Apply the fix**: Add a **Convert Column Type** task and set **Format Output** (Universal, UK, US or Custom) and pick the date format that matches the data 4. **Test the solution**: Use Draft mode or **Preview Data at this Task** to confirm the conversion works 5. **Deploy and monitor**: Apply the pipeline and check the result **Prevention**: Standardize date formats at the data source or add validation at the start of the pipeline. ### Join failure: missing key values **Scenario**: Customer data enrichment produces fewer results than expected because the join key has empty values. **Symptoms**: - The join completes but the output row count drops significantly - Enrichment columns contain unexpected empty values **Resolution steps**: 1. **Diagnose the problem**: The Data Quality report shows a high share of empty values in the join key 2. **Understand the impact**: Rows with no Customer_ID can't be matched 3. **Design the solution**: Create separate flows for valid and invalid records 4. **Implement error handling**: - Add a Conditional Filter to separate empty Customer_IDs - Create an error View for records needing attention - Set up a Messaging automation to alert the data quality team 5. **Validate the approach**: Ensure both the valid and error flows work correctly **Prevention**: Validate join key completeness before building complex pipelines. ### AI transformation ambiguity **Scenario**: A task created with **Describe your transformation** produces unexpected results because the natural language instructions are unclear. **Symptoms**: - The task completes without an error - Results don't match business intent - Later calculations give wrong results **Resolution steps**: 1. **Review the prompt**: Open the task and read the instruction 2. **Test with sample data**: Check the output on a few rows 3. **Refine the language**: Make the prompt more specific and unambiguous 4. **Compare approaches**: Test the AI-generated task against a manual transformation task 5. **Choose the best method**: Select the approach that best matches your business logic 6. **Document the solution**: Record successful prompt patterns for reuse **Prevention**: Start with simple, specific prompts and build complexity gradually. ### Dataset Refresh automation failure **Scenario**: A scheduled dataset refresh fails overnight because a connection's authentication expired. **Symptoms**: - The automation shows an **Error** status in the Data Library - **Last run result** shows the failure - Dashboards show stale data **Resolution steps**: 1. **Check the automation**: Open it in the Data Library **Automations** tab and read **Last run result** 2. **Fix the connection**: Re-authenticate the connection (see [Connection troubleshooting](https://mammoth.io/docs/learn/troubleshooting/connection-troubleshooting/)) 3. **Test the fix**: Use **Run now** to confirm the automation succeeds 4. **Monitor future runs**: Check the automation status after the next scheduled run **Prevention**: Check connection health regularly, and re-authenticate connections before their credentials expire. ## Error handling architectures ### Error flow pattern **Inspired by biotech customer success**: Route problematic data through separate processing flows instead of blocking entire pipelines. **Implementation approach**: ``` Main Pipeline: Source Data → Quality Check → Valid Data Processing → Output Error Pipeline: Source Data → Quality Check → Invalid Data → Error Notification → Manual Review ``` **Setup steps**: 1. Create a main View with the standard processing pipeline 2. Create an error View with a Conditional Filter for quality issues 3. Set up a Messaging automation for error notifications 4. Document error handling procedures for your team ### Quality gates Use a **Data Check** task as a gate between major processing stages. When a check fails, the Data Check result shows how many checks failed. Depending on how you configured the check, the pipeline either halts and blocks downstream tasks, or warns and continues. Fix the data issue and re-run, or change the check threshold. **Best practices**: - Design pipelines with logical checkpoints - Put quality gates between major processing steps - Use **Send to Dataset** to create processing branches ## Getting help When you need additional support beyond self-service troubleshooting: **Escalation path**: 1. **Document the scenario**: Include data samples and pipeline configuration 2. **Contact support**: Provide context about business impact and urgency 3. **Share screen recordings**: Show the error occurring in real time **Self-help resources**: - Search documentation for specific error messages - Test with simplified data samples to isolate variables > **Pro Tip** > > Most transformation errors come from one failing task. Preview the data at each task to find where the pipeline goes wrong. ## Related resources - [Data quality report](https://mammoth.io/docs/learn/explore-discover/data-quality-report/)—Identify issues before they cause errors - [Monitor](https://mammoth.io/docs/learn/monitor/)—Where pipeline and automation problems surface - [Activity Log](https://mammoth.io/docs/learn/monitor/activity-log/)—History of changes made in a workspace - [Pipeline optimization](https://mammoth.io/docs/learn/performance/pipeline-optimization/)—Speed up slow transformations - [Data quality issues](https://mammoth.io/docs/learn/troubleshooting/data-quality-issues/)—Fix duplicates, nulls, and type mismatches - [Validation guide](https://mammoth.io/docs/guides/advanced/validation/)—Build checks into your pipelines - [Audit logs](https://mammoth.io/docs/learn/security-overview/audit-logs/)—Compliance and governance records ## Still not resolved? If your pipeline error doesn't match any of the above patterns, contact [support@mammoth.io](mailto:support@mammoth.io) with: - Your workspace name and project name - The name of the pipeline and the failing step - A screenshot of the failing task - What the pipeline was doing before the error started occurring --- # Workspace management URL: https://mammoth.io/docs/learn/workspace-management/ · Updated: 2026-11-02 Create and configure a Mammoth workspace: rename it, invite users, manage plans and storage, and set up API access. Start here for Workspace Owners. A **workspace** is your dedicated environment in Mammoth Analytics. It's where you manage your data, projects, team members, billing, and settings, isolated from other workspaces. This section is for Workspace Owners and team leads. Start with [Creating a workspace](https://mammoth.io/docs/learn/workspace-management/workspace-creation/) if you have no workspace yet, or [Workspace settings](https://mammoth.io/docs/learn/workspace-management/workspace-settings/) to manage an existing one. ## Pages in this section | Page | Purpose | Best for | | --- | --- | --- | | [**Creating a workspace**](https://mammoth.io/docs/learn/workspace-management/workspace-creation/) | Create a workspace, choose a plan, and see what a new workspace contains | New users, expanding teams, separate projects | | [**Workspace settings**](https://mammoth.io/docs/learn/workspace-management/workspace-settings/) | Rename the workspace, invite users, manage plans and storage, create API keys | Workspace Owners, team leads | ## Key concepts ### What is a workspace? A workspace is an isolated environment in Mammoth Analytics. Each workspace has: - **Its own data**: Datasets, projects, and transformations are separate - **Independent users**: Each workspace manages its own team members and roles - **Separate billing**: Plans and costs are tracked per workspace - **Isolated settings**: Configurations don't affect other workspaces you own You can belong to multiple workspaces, and you can switch between them anytime using the workspace dropdown (top-left of the app). ### Workspace Owner and Workspace Member roles | Role | Permissions | | --- | --- | | **Workspace Owner** | Full control: create/delete workspaces, invite users, manage plans, access all settings, manage projects | | **Workspace Member** | Limited control: access assigned projects, view workspace info, participate in team features (exact permissions depend on project role) | See the [roles and permissions matrix](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix) for every permission by role. ## Common tasks ### I want to - **Create a new workspace**: See [Creating a workspace](https://mammoth.io/docs/learn/workspace-management/workspace-creation/) - **Invite team members**: See [User management](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#user-management) - **Upgrade my plan or change billing**: See [Plan and storage](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#plan--storage) - **Rename my workspace**: See [General settings](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#general) - **Delete my workspace**: See [Plan and storage](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#plan--storage) - **Manage API access**: See [API keys](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#api-keys) - **Create projects**: See [Creating a project](https://mammoth.io/docs/learn/projects/create-project/) ## Workspace lifecycle ```plaintext CREATE WORKSPACE ↓ SELECT PLAN (if prompted) ↓ CONFIGURE SETTINGS ↓ INVITE TEAM MEMBERS ↓ START USING (upload data, create projects) ↓ UPGRADE PLAN (when needed) ↓ MANAGE GROWTH (add users, projects, storage) ``` ## Related guides - [Creating a workspace](https://mammoth.io/docs/learn/workspace-management/workspace-creation/): Step-by-step setup guide - [Workspace settings](https://mammoth.io/docs/learn/workspace-management/workspace-settings/): Configure users, plans, API keys, and more - [Getting started](https://mammoth.io/docs/learn/getting-started/): New to Mammoth? Start here --- **Need help?** Check the [troubleshooting guide](https://mammoth.io/docs/learn/troubleshooting/) or contact Mammoth Support. --- # Creating a workspace URL: https://mammoth.io/docs/learn/workspace-management/workspace-creation/ · Updated: 2026-11-02 Create a new Mammoth workspace from the workspace dropdown, choose a plan, and see what a new workspace includes. Also covers renaming and deleting. A **workspace** is your dedicated environment in Mammoth Analytics where you manage your data, projects, team members, and settings. Each workspace is isolated—users, data, and configurations are separate from other workspaces you may own or belong to. This guide is for anyone creating their first workspace or adding another one. Start with [What you'll need](#what-youll-need), then follow Step 1 through Step 5. ## What you'll need To create a workspace, you need: - **A Mammoth Analytics account**: Sign up at [mammoth.io](https://mammoth.io/docs/) if you don't have one yet - **A workspace name**: Something descriptive, such as "Marketing Analytics", "Sales Dashboard", or "Product Data Lab" ## How to create a workspace ### Step 1: Find the workspace selector 1. Sign in to Mammoth Analytics at [app.mammoth.io](https://app.mammoth.io) 2. Look at the **top-left corner** of the application, where your current workspace name appears with a dropdown arrow ### Step 2: Open the Create New Workspace dialog 1. Click the **workspace dropdown** (top-left) to see a list of your workspaces 2. At the **top** of the dropdown, click **+ Create New Workspace** 3. A dialog appears where you enter your workspace name ![Create New Workspace dialog with the name Marketing entered, a Cancel button, and a Create button](https://mammoth.io/docs/images/20260504_174136_Screenshot2026-04-291720501.webp) ### Step 3: Enter a workspace name The dialog only asks for one thing: | Field | Details | | --- | --- | | **Workspace name** | Enter a descriptive name. This appears in the top-left dropdown and all workspace management pages. Examples: "Marketing Analytics", "Sales Dashboard", "Product Data Lab" | Click **Create** to proceed. There's no plan picker in this dialog. Plan selection happens on the next screen. ### Step 4: Choose a plan If the new workspace doesn't have a plan yet, Mammoth takes you to a plan-selection screen showing the available self-serve plans with a **Monthly** / **Annually** billing toggle. Each plan card has a trial button (for example, **Start with Pro trial**). On this screen you either pick a plan, or use the **Delete workspace** link at the bottom to remove the workspace you just created. If you meant to switch accounts instead, use **Log out** in the same location. ### Step 5: Start using the workspace **Expected result**: Your workspace is created, and Mammoth switches you to it. You see: ![New Marketing workspace with an empty Data Library in the New project project, a free trial banner, and a New Dataset button](https://mammoth.io/docs/images/20260504_174533_Screenshot2026-04-291722361.webp) - **Workspace name** in the top-left dropdown, such as "Marketing" - **A default project** named "New project", ready for data - **Data Library** showing "No Datasets yet", ready for your first dataset - **Left sidebar** with navigation (Data Library, Automations, Dashboards, etc.) - **Free Trial banner**, if you are on a trial plan, showing when your trial ends You can start uploading data immediately or create additional projects from the project selector in the top breadcrumb. ## What happens after creation ### Automatic setup - Your new workspace is **active immediately** and ready to use - You're automatically set as the **Workspace Owner** with full permissions - A **default project** named "New project" is created automatically ### Your new workspace includes - **Data Library**: Ready to receive your first dataset - **Empty state**: The Data Library shows "No Datasets yet" until you create a dataset - **Navigation sidebar** with access to all Mammoth features (Data Library, Automations, Dashboards, etc.) - **Workspace name** displayed in the top-left dropdown - **Plan information banner**, if applicable: Shows plan status and any relevant alerts ### Next steps Once your workspace is created, you can: | Task | Where to start | | --- | --- | | **Invite team members** | Workspace Settings → User Management → **Invite Users** | | **Upload your first dataset** | Data Library | | **Upgrade your plan** | Workspace Settings → Plan & Storage | | **Set up API access** | Workspace Settings → API Keys | | **Create projects** | Project selector in the top breadcrumb → New Project | ## Workspace naming conventions Choose workspace names that clearly describe their purpose: **Good names:** - "Marketing Analytics Q2-Q3" - "Financial Reporting - FY2024" - "Customer Insights - Product Team" - "Sales Pipeline Dashboard" **Avoid vague names:** - "Workspace 1" or "Test" - "My Data" - Single letters ## Plans and billing Mammoth offers Free, Starter, Team, Pro, and Enterprise plans. Enterprise is arranged through sales. Paid plans can be billed **Monthly** or **Annually**. For current pricing and plan comparisons, see **Workspace Settings → Plan & Storage** or contact sales. ### Changing your plan later You can change or upgrade your plan at any time. **Prerequisite**: You are a Workspace Owner. 1. Go to **Workspace Settings** (bottom-left sidebar) → **Plan & Storage** 2. Click the upgrade button 3. Select a new plan and confirm **Expected result**: Plan changes don't affect your data or projects. ## Frequently asked questions **Q: Can I change the workspace name after creating it?**\ A: Yes. Go to Workspace Settings → General → click the edit (pencil) icon next to the workspace name. **Q: How many workspaces can I create?**\ A: You can create multiple workspaces. Each workspace is independent and has its own plan. **Q: What if I forget my workspace name?**\ A: Click the workspace dropdown (top-left) to see all workspaces you own or belong to. **Q: Can I delete a workspace after creating it?**\ A: Yes, self-serve. You don't need to contact support. Go to Workspace Settings → **Plan & Storage** and click **Delete workspace**, or use the **Delete workspace** link if you're still on the plan-selection screen. You need the Workspace Owner role. Mammoth asks you to confirm that you understand this cancels your subscription and deletes your workspace. **Q: Do I lose my old workspace when I create a new one?**\ A: No. All your workspaces remain accessible in the workspace dropdown. You can switch between them anytime. **Q: What if the workspace creation fails?**\ A: Check: - Your internet connection is stable - You have an active Mammoth Analytics account - Try refreshing the page and retrying If issues persist, contact [Support](https://support.mammoth.io). ## Related articles - [Workspace settings](https://mammoth.io/docs/learn/workspace-management/workspace-settings/): Manage workspace name, users, plans, and API keys - [Creating a project](https://mammoth.io/docs/learn/projects/create-project/): Organize your data into projects - [User management](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#user-management): Add collaborators to your workspace - [Plan and storage](https://mammoth.io/docs/learn/workspace-management/workspace-settings/#plan--storage): Upgrade your plan and manage storage --- **Need help?** Check the [troubleshooting guide](https://mammoth.io/docs/learn/troubleshooting/) or contact Mammoth Support. --- # Workspace settings URL: https://mammoth.io/docs/learn/workspace-management/workspace-settings/ · Updated: 2026-11-02 Reference for Mammoth Workspace Settings: rename the workspace, invite and manage users, manage plan and storage, and create API keys and external keys. Workspace Settings is the control panel for your Mammoth workspace. From here you manage who has access, what they can do, how much storage you're using, and how external tools connect to your data. This page is for Workspace Owners; Workspace Members can use only the actions listed in the [permissions reference](#roles--permissions-reference). Open it from the **bottom of the left sidebar**. The link is visible to all users, but most actions require the Workspace Owner role. Settings opens with a list of sections on the left. Pick the section you need from the table below. | Section | What you can do here | Who can use it | | --- | --- | --- | | [General](#general) | Rename workspace, monitor storage, manage projects, enable early access features | Owner (full); Members (view, and create projects) | | [User Management](#user-management) | Invite users, assign roles, manage project access | Owner only | | [Plan & Storage](#plan--storage) | View subscription, manage billing, free up storage | Owner only | | [API Keys](#api-keys) | Generate API keys, add external service keys, register OAuth apps | Owner only | | [Connected apps](#connected-apps) | See and revoke third-party apps you allowed to access your Mammoth data | — | ## General The General section shows your workspace name and your role, a storage summary, the current plan, and the list of projects. Workspace Owners can also enable early access features from here. ![Workspace Settings General tab with Data usage, Current Plan with Trial status, and a Projects table with a New Project button](https://mammoth.io/docs/images/20260504_174935_Screenshot2026-04-301304431.webp) ### Rename your workspace Click the **pencil icon** next to the workspace name to open the Rename Workspace dialog. Enter a different name and confirm. - Maximum length: **63 characters** - Requires **Workspace Owner** role ### Storage usage The circular indicator shows how much of your allocated storage is in use. Hover over it for the exact figures. | Usage level | What you see | | --- | --- | | Under 80% | Used and allowed storage | | 80–99% | "Storage almost Full" warning: reaching 100% storage pauses automated data imports and pipelines | | 100% | "Storage full" message: automated data imports and pipelines are paused | A **Contact Support** button appears once usage reaches 80%, for Owners who can change the plan. For a dataset-by-dataset breakdown with delete controls, go to [Plan & Storage, Manage storage](#manage-storage). ### Current plan The Current Plan card shows your plan name, its status (Active or Trial), and the maximum storage and number of users the plan allows. A **Change Plan** button appears for Owners on self-serve plans, except during a trial. It opens a plan comparison with a Monthly / Annually toggle. Non-self-serve plans do not show this button. ### Projects The projects table lists every project in your workspace. ![General tab with arrows pointing to the New Project button and a project row's three-dot menu](https://mammoth.io/docs/images/20260430_074032_WorkspaceSettingsGeneraltabshowing.webp) | Column | What it shows | | --- | --- | | **Name** | Project name (click to open it) | | **Content** | Dataset count (e.g., "3 datasets") | | **Last updated** | How recently the project was changed | | **Users** | Avatars of the users who have access to the project | | **Project Role** | Your role in that project: Admin, Editor, or—| | **⋯ menu** | Per-project actions | Click **New Project** (top right) to create a new project. The ⋯ menu offers **Project Settings**, **Manage Users**, **Leave Project** or **Join Project**, and **Delete Project**, depending on your role. Editors see **Delete Project** greyed out. ### Upcoming features > Info Workspace Owners on non-self-serve plans only\ > This section is not visible to Workspace Members, or on self-serve plans. ![Upcoming Features section with Beta Features switched on and Alpha Features off, each noting no features are available](https://mammoth.io/docs/images/20260504_175249_Screenshot2026-04-301311041.webp) You see a toggle for each early access segment configured for your workspace, most commonly: **Beta Features**: Stable improvements released before general availability. Safe for production use, but may receive minor adjustments based on feedback. **Alpha Features**: Early stage concepts. These may change significantly or have rough edges. Best used for evaluation and feedback, not critical workflows. Not every workspace sees both toggles. Which ones appear depends on what's been made available to your account. Switching a toggle takes effect immediately. When no features are available for a segment, the area shows "No features available in this segment at the moment." ## User management The User Management section is where you invite users, manage their workspace and project roles, and remove access. ![User Management tab with Invite Users button, Filter by and Search, and a table of Name, Projects assigned, and Last active](https://mammoth.io/docs/images/20260504_175333_user-management-scrolled1.webp) ### Filters and search Use the **Filter by** dropdown to narrow the user list: ![Filter by dropdown open with All, Invited, and No projects assigned, beside a user detail panel with project roles](https://mammoth.io/docs/images/20260504_175421_user-management-filter-dropdown1.webp) | Filter | Shows | | --- | --- | | **All** | Everyone in the workspace (default) | | **Invited** | Users with pending, unaccepted invitations | | **No projects assigned** | Users not yet added to any project | A **Search** field appears once the workspace has 8 or more users, and filters the list as you type. ### User table | Column | What it shows | | --- | --- | | **Name** | User avatar, full name, email, and "(Owner)" label for the workspace owner. Click any header to sort. | | **Projects assigned** | Each project shown as a colored dot, project name, and role. Use **Show more / Show less** when a user belongs to many projects. | | **Last active** | Relative time (for example, "2 minutes ago"). Hover for the full timestamp. Users whose invitation has expired show **"Expired"** in grey. | Click any row to open the [User Side Panel](#user-side-panel). ### Bulk actions Select one or more users with the checkboxes to reveal the bulk action bar: - **Assign to Project**: Opens a project multi-select. All selected users are added to the chosen projects at once. - **Remove from workspace**: Confirms and removes all selected users in one step. ### User side panel Click any user row to open their detail panel on the right. ![User Management table beside a side panel showing a user's workspace role and per-project roles, with Assign to Projects](https://mammoth.io/docs/images/20260505_115102_UserManagement.webp) The panel shows: - User avatar, full name, and email - Workspace role: **Workspace Member** or **Workspace Owner** - Join date - Every project the user belongs to, with a role dropdown per project - **Assign to Projects** button to add the user to more projects #### Changing a project role Click the role dropdown arrow next to any project name to change the user's role: ![Project role dropdown for a user, with Project Admin, Project Editor checked, and View Roles & Permissions](https://mammoth.io/docs/images/20260504_175759_Screenshot2026-04-301317301.webp) | Role | What they can do | | --- | --- | | **Project Admin** | Manage project settings and users, create and delete Live Connections, share and delete the project | | **Project Editor** | Access, edit, and manage project data and pipelines | The **View Roles & Permissions** link at the bottom of the dropdown opens the [full permission matrix](#roles--permissions-reference). #### Removing a user from a project Click the **trash icon** next to any project in the panel to remove the user from that project only. A confirmation prompt appears before the action is applied. ![Remove user from workspace confirmation with an I understand checkbox, Cancel, and Permanently remove users button](https://mammoth.io/docs/images/20260504_180123_Screenshot2026-04-301318231.webp) > Tip: Workspace membership is unaffected\ > Removing a user from a project removes only their project access. They remain in the workspace and can be re-added to the project at any time. #### Three-dot menu ![User side panel with the three-dot menu open, showing Make workspace owner and Remove User](https://mammoth.io/docs/images/20260504_175534_user-panel-3dot-menu1.webp) Options depend on whose profile you're viewing: **When viewing another member (as Owner):** - **Make workspace owner**: Adds the Owner role to this user. Their previous role (for example, Member) is replaced by Owner. Your own Owner role is unaffected, so a workspace can have multiple Owners. (This menu item toggles: viewing an existing Owner instead shows **Make workspace member**.) - **Remove User**: Removes the user from the workspace entirely. **When viewing your own profile:** - **Leave Workspace** - **Delete Profile**: Permanently and irreversibly deletes your Mammoth account. This opens a short wizard: a warning screen, then a review of the workspaces you own, then a final confirmation step where you must type "DELETE" before the account is removed. > warning: Delete Profile is irreversible\ > Deleting your profile permanently removes your account, all workspaces you own, their settings, users, data, and projects. This cannot be undone. ### Inviting users **Prerequisite**: You are a Workspace Owner. Click **Invite Users** (top right) to open the **Invite users to workspace** dialog. Mammoth tells you in the dialog when you have reached your plan's user limit. ![Invite users to workspace dialog with an email address box, an Invite button, an Assign to Projects checkbox, and an Existing workspace users list](https://mammoth.io/docs/images/20261009_101002_InviteUsersModal.webp) **Email field**: Enter one or more addresses separated by commas, semicolons, spaces, tabs, or newlines, up to 250 at a time. Mammoth validates format and flags duplicates or already-invited users. Click **Invite** to send the invitations. **Assign to Projects** (optional): Check this to reveal a project multi-select. Invited users are added to the selected projects when they accept the invitation. **Existing workspace users**: Expand this section to see all current members, change their workspace roles with the role selector, use **Reinvite** on pending invitations, or mark users for removal with the trash icon (use **Undo** to reverse a pending removal). ![Invite users dialog with Existing workspace users expanded, trash icons per user, and a disabled Apply changes button](https://mammoth.io/docs/images/20260504_175941_Screenshot2026-04-301321361.webp) **Apply changes** appears only when you have marked users for removal. Click it to remove them. **Expected result**: After you click **Invite**, invited users receive an email invitation and appear in the user table as invited. ## Plan & storage The Plan & Storage section shows your subscription details, storage consumption, and add-ons. Visible to Workspace Owners only. ![Plan & Storage tab with Plan Details (subscription, storage, seats, summary) and a collapsed Manage storage section](https://mammoth.io/docs/images/20260505_055041_plan-storage-manage1.webp) ### Plan details card | Field | What it shows | | --- | --- | | **Subscription** | Plan name and billing frequency (for example, "Team Plan - Monthly") | | **Billing & Invoices** | Button that opens billing and invoice details; Owners on paid self-serve plans, once any trial period has ended | | **Storage** | GB used · GB allocated · color-coded progress bar | | **User seats** | Seats included in your plan + any purchased add-ons | | **Plan Summary** | Current plan cost and renewal date (Owners only) | | **Switch to annual billing** | A link under the Plan Summary on monthly plans: "get 2 months free" | This card is only shown for plans billed through Stripe. Other plans skip straight to Manage storage below. #### Changing your plan The **Change Plan** button (top right) appears for Owners on self-serve plans. During a trial or on the Free plan, the Plan Details card shows an upgrade button instead. The plan comparison includes: - Monthly / Annually billing toggle - Plan cards with pricing and a "Most Popular" badge on the recommended plan - Free trial indicators where applicable - A feature comparison table and an FAQ section #### Add-ons On plans with extra storage or additional user seats, the Storage and User seats rows show the extra amount, and the Plan Summary total reflects their cost. ### Manage storage The **Manage storage** accordion shows a summary in its header: the number of datasets and used / allowed storage. It's expanded by default on non-Stripe plans; on Stripe-billed plans it starts collapsed, and you click the header to expand it. ![Manage storage expanded with Search, Delete, and a dataset table showing Project, Size, and Last modified](https://mammoth.io/docs/images/20260505_055107_plan-storage-manage-expanded21.webp) | Control | What it does | | --- | --- | | **Search** | Filters the list by dataset name (shown once there are 8 or more datasets) | | **Delete** | Bulk-deletes selected datasets after confirmation | | **Size** column | Sortable; defaults to largest first | | **Expand rows** | Shows a dataset's individual views with their sizes | > Tip Finding wasted storage\ > Sort by **Size** descending to instantly see which datasets consume the most space. Expand a row to check whether individual views or batch files can be removed without deleting the parent dataset. ## API keys The API Keys section has three cards: **API tokens** for programmatic access to Mammoth, **External API keys** for third-party services like OpenAI, and **OAuth apps** for apps that let people connect their Mammoth account with Sign in with Mammoth. Managing them is Owner-only in Mammoth's Roles & Permissions reference (below). ![API Keys section with the API tokens card, a Generate key button, and a token row with a masked key](https://mammoth.io/docs/images/20261009_101001_APIKeysTokensCard.webp) ### API tokens API tokens let scripts, pipelines, and BI tools authenticate with the Mammoth API using a token instead of a user session. The token starts with `mm_` and is sent as `Authorization: Bearer mm_...`; see [Authentication](https://mammoth.io/docs/build/auth/). **Creating an API key:** **Prerequisite**: You are a Workspace Owner, and the **API tokens** card is shown in your workspace. 1. In the **API tokens** card, click **Generate key** 2. In the **Create API key** dialog, enter a **Name** so you can recognize the key later 3. Optionally turn on **Project scoped** and select a project to limit the key to that project. If you leave it off, the key works in every project in the workspace. Scope it to a project whenever the integration only needs that project's data. 4. Click **Create key** 5. Click **Copy secret**, store the secret, then click **Done** **Expected result**: The key appears as a row in the API tokens card. > Danger: Save the secret before closing\ > Mammoth shows the secret once, in the **API key created** dialog. After you click **Done** it cannot be retrieved. Copy it to a password manager or secrets store immediately. To replace a compromised key, remove it and generate a new one. Each row shows the key name and the project it is scoped to. Legacy tokens carry a warning that they will stop working; replace them with a new key. Legacy tokens also offer **Copy key** in the row menu. **Row actions:** **Edit** (rename the key and change its project scope) · **Remove** > **Availability:** The API tokens card is shown only for workspaces that have the API tokens feature enabled. ### External API keys External API Keys store credentials for third-party AI providers that Mammoth features call on your workspace's behalf. Examples are [Generative AI](https://mammoth.io/docs/learn/transform/generative-ai/) and Extract Text. Keys are workspace-scoped: all workspace members can use them, but only Workspace Owners can add or remove them. **Supported providers:** OpenAI (ChatGPT), Anthropic (Claude), Google (Gemini), xAI (Grok) **Adding a key:** **Prerequisite**: You are a Workspace Owner. 1. In the **External API keys** card, click **Add external key** 2. Select the **AI provider** from the provider grid and click **Next** 3. Choose the **Model** to associate with this key 4. Optionally expand **Preferences** to configure provider-specific options (see below) 5. Enter a **Key Name**, a display label that defaults to the model name 6. Paste the **API key** into the masked field 7. Click **Add External Key**. Mammoth validates the key automatically on submission. **Expected result**: The key appears in the External API Keys table. Each row shows the key name and the last four characters of the key. **Row actions:** **Remove** > Info: Key values can't be edited\ > Once a key is added, nothing about it can be changed, including the display name. To replace a key or rename it, remove it and add a new one. **Provider preferences** Expanding **Preferences** shows optional toggles for the model you selected. Depending on the model, these can include **Extended thinking**, **Reasoning effort**, **Web search**, and **Batch API**. Check the Preferences panel for the model you've chosen; not every model exposes every preference. For full setup instructions and model reference, see [Generative AI: adding an external API key](https://mammoth.io/docs/learn/transform/generative-ai/#adding-an-external-api-key). ### OAuth apps The **OAuth apps** card lists apps registered for Sign in with Mammoth. Click **Register app** to register one. Only workspace admins can register or delete OAuth apps. ## Connected apps The **Connected apps** section lists third-party apps you allowed to access your Mammoth data. Each connection is limited to the project you chose, or covers all your projects. Click **Revoke** on a row to remove an app's access; the app loses access immediately, and you can connect it again from the app. ## Roles & permissions reference Open the permission matrix in the product by clicking **View Roles & Permissions** at the bottom of any project role dropdown in the User Side Panel. The modal has a **Workspace Permissions** tab and a **Project Permissions** tab. The complete matrix for workspace, project, and dashboard roles is on the [Access Control](https://mammoth.io/docs/learn/security-overview/access-control/#roles-and-permissions-matrix) page. > Info:\ > **Creating a new project and viewing the Activity Log are the only workspace-level actions available to Members.** Every other action in Workspace Settings requires the Owner role. > > The Subscription group only appears in the modal on self-serve plans. On non-self-serve plans, the "Enable/disable upcoming features" permission appears in its place under General (and is only shown to Owners). > TIP:\ > When in doubt, assign **Project Editor**. Upgrade to **Project Admin** only when the user needs to manage project membership, create new Live Connections, or change project settings. ## Enterprise plan The Enterprise plan is arranged through sales and includes: - Unlimited users and custom storage - Event-driven automation - IP allowlisting and VPC deployment - Custom-built connectors - 99.9% SLA and a named success manager SSO and enforced MFA are plan features that the Pro plan includes. Contact your Mammoth account team or see the pricing page to learn more. ## Tips and best practices **Be deliberate about Owner access.** A workspace can have multiple Owners. Each Owner has full admin rights—billing, user management, API keys, and workspace deletion. Assign Owner only to people who genuinely need that level of control. Use the three-dot menu in the User Side Panel to promote a Member to Owner; the action takes effect immediately. **Add users to projects at invite time.** Check **Assign to Projects** when sending invitations. This saves a follow-up step and ensures new members can start working the moment they accept. **Use the "No projects assigned" filter after bulk invites.** It instantly surfaces anyone still waiting for project access. **Monitor storage from the accordion, not the gauge.** The circular indicator on the General section shows total workspace usage. The Manage Storage accordion in Plan & Storage shows per-dataset sizes with delete controls—sort by Size to find what's taking up space. **Scope API keys to a project.** When creating a key for an integration that targets one specific project, turn on **Project scoped**. This prevents the token from accessing other projects in the workspace even if the secret is exposed. **Label External API Keys with context.** Since the key value is unreadable after creation, use the Name field to record what it's for—for example, "OpenAI PDF extraction - prod". This makes rotation straightforward. --- --- # Migrating from Alteryx to Mammoth URL: https://mammoth.io/docs/migration/from-alteryx/ · Updated: 2026-11-02 Compare Alteryx and Mammoth by audience, features and automation, then choose full migration, a hybrid setup or an evaluation period. Alteryx is a data preparation platform built for technical analysts, while Mammoth is aimed at business users who need self-service data transformation without IT dependencies. This guide compares the two, helps you choose a migration strategy, and provides a checklist for the transition. ## Understanding the positioning ### Using Mammoth alongside Alteryx and BI tools Mammoth can sit alongside your existing BI tools (Power BI, Tableau) rather than replace them. Alteryx often involves dedicated IT specialists, while Mammoth is designed for business users to build their own pipelines. **Positioning:** - **Alteryx**: IT-centric tool for data engineers and technical analysts - **Mammoth**: Business-user tool for departmental self-service - **Both together**: Some organizations use each for different use cases ### Target user differences **Alteryx fits:** - Data engineers and technical analysts - Organizations with dedicated Alteryx specialists - Complex spatial analysis and predictive modeling - Multi-system enterprise ETL workflows **Mammoth fits:** - Business analysts and department managers - Excel power users graduating to larger datasets - Teams wanting self-service without IT dependencies - Organizations looking for a lower-effort starting point ## Core differences ### Learning curve and accessibility **Alteryx training requirements** - Technical background helpful - Often supported by IT specialists or dedicated Alteryx users - Workflow designer interface with a large tool palette **Mammoth training requirements** - Designed for business users, with no code required - Familiar spreadsheet-style concepts such as filters, lookups, and pivots - Visual, step-by-step pipeline interface, plus an AI Prompt bar that generates tasks from a description > Tip: When IT builds your workflows\ If your team currently waits on IT to build Alteryx workflows, Mammoth lets business users build common transformations themselves. ## Feature comparison ### Data transformation capabilities | Capability | Alteryx | Mammoth | Notes | | --- | --- | --- | --- | | **Visual pipeline development** | Horizontal workflow canvas | Vertical list of pipeline tasks | Different layouts, same idea | | **Transformation library** | Very large tool palette | Focused set of data preparation steps | See the transform reference | | **Data connectors** | Compare against your sources | Compare against your sources | Check both connector lists | | **AI-powered operations** | Check current Alteryx documentation | AI Prompt bar, Generative AI, AI SQL Query, Bulk Replace | | | **Business user accessibility** | Technical background helpful | Built for business users | | | **Spatial analysis** | Advanced GIS | Not available | Alteryx | | **Predictive analytics** | Built in | Not a focus | Alteryx | ### Automation and scheduling **Alteryx approach:** - Scheduling typically requires Alteryx Server (check current licensing with Alteryx) - IT-managed scheduling and monitoring - Technical to set up and maintain **Mammoth approach:** - Built-in Automations for scheduled dataset refresh, data consolidation, and email messaging, with no separate server - Scheduling managed by business users ## When to choose each platform ### Choose Alteryx when you have **A dedicated technical team** - Data engineers familiar with Alteryx - Budget supports the Alteryx license and specialist staffing - Complex spatial or predictive analytics needs - Existing Alteryx workflows and expertise **Advanced requirements** - Multi-system enterprise ETL workflows - Geographic information system (GIS) analysis - Advanced statistical modeling - Regulatory requirements for specific Alteryx certifications **Enterprise-scale complexity** - Data sources that need specialized connectors - Complex data governance and lineage tracking - Advanced workflow sharing across large teams ### Choose Mammoth when you need **Business-user self-service** - Self-service data transformation - A short path to first results without specialist training - Department-level autonomy from IT - Excel-familiar interface with advanced capabilities **Cost constraints** - Budget constraints on specialist tools - No dedicated Alteryx expertise available - Avoiding specialist hiring and training costs **Faster implementation** - Fast productivity required - Minimal training budget - Complement existing BI investments - Data management shared across the organization ## Migration strategies ### Strategy 1: Full migration **Best for:** - Underutilized Alteryx investments - Cost pressure requiring alternatives - Simple transformation use cases - Teams struggling with Alteryx complexity **Migration steps:** 1. **Audit current Alteryx workflows** - Identify complexity levels 2. **Pilot 2-3 workflows in Mammoth** - Validate capability match 3. **Train business users** - Start with the workflows they own 4. **Migrate simple-to-moderate workflows** - Keep complex ones in Alteryx 5. **Cancel or reduce Alteryx licensing** - Once the migrated workflows are validated ### Strategy 2: Hybrid approach **Best for:** - Organizations with mixed requirements - Existing Alteryx expertise and investment - Cost optimization without capability loss - Different user types (technical vs business) **Hybrid setup:** - **Alteryx**: Complex ETL, spatial analysis, predictive modeling - **Mammoth**: Business user self-service, departmental automation - **Both feed same BI layer**: Power BI, Tableau, or other visualization tools ### Strategy 3: Evaluation period **Best for:** - Alteryx license renewal decisions - Budget planning and cost comparison - Team capability assessment - Proof-of-concept requirements **Four-week evaluation plan:** 1. **Week 1**: Identify 3-5 representative Alteryx workflows 2. **Week 2**: Recreate workflows in Mammoth with business users 3. **Week 3**: Compare results, effort, and team satisfaction 4. **Week 4**: Calculate TCO and make strategic decision > Tip: Start before the renewal date\ Start your Mammoth evaluation well before your Alteryx renewal so that you have a cost comparison ready for budgeting. ## Migration checklist ### Pre-migration assessment **Current state analysis** - [ ] Document all active Alteryx workflows - [ ] Identify workflow complexity (simple/moderate/complex) - [ ] Calculate current TCO (licensing + training + specialist time) - [ ] Survey user satisfaction and adoption rates - [ ] List business users blocked by Alteryx complexity **Capability mapping** - [ ] Match Alteryx functions to Mammoth equivalents - [ ] Identify workflows requiring Alteryx-specific features - [ ] Test critical transformations in Mammoth - [ ] Validate output consistency and accuracy - [ ] Measure time-to-build comparison ### Migration execution **Phase 1: Foundation** - [ ] Set up Mammoth workspace and projects - [ ] Train core business users - [ ] Migrate 2-3 simple workflows as proof-of-concept - [ ] Establish success metrics and comparison baselines **Phase 2: Scale** - [ ] Migrate additional workflows based on complexity - [ ] Document time savings and user satisfaction - [ ] Create Mammoth templates for common patterns - [ ] Train additional team members **Phase 3: Optimization** - [ ] Optimize Mammoth workflows for performance - [ ] Set up automation and scheduling - [ ] Create documentation and best practices - [ ] Calculate actual cost savings achieved ## Troubleshooting common migration challenges ### "Alteryx has features Mammoth doesn't" **Solution**: Use hybrid approach - Keep Alteryx for spatial analysis, complex predictive modeling - Use Mammoth for standard data prep, business reporting - Reduce Alteryx licensing to specialist-only users ### "Our team is trained on Alteryx" **Solution**: Gradual transition - Maintain Alteryx expertise for complex workflows - Train business users on Mammoth for self-service - Compare productivity on similar tasks - Let the comparison results guide adoption ### "Alteryx workflows are already built" **Solution**: Selective migration - Don't rebuild everything at once - Migrate workflows as they need updates - Focus on frequently modified or new workflows - Keep stable, complex workflows in Alteryx ### "We're locked into Alteryx contracts" **Solution**: Plan for renewal - Use evaluation period to prepare migration plan - Calculate hybrid approach cost savings - Negotiate reduced licensing at renewal - Phase migration over contract periods ## Next steps after reading this guide ### Start your evaluation 1. **Identify pilot workflows** - Choose 2-3 representative Alteryx workflows 2. **Engage business users** - Include actual end users in evaluation 3. **Document comparison** - Time, cost, and satisfaction metrics 4. **Plan migration strategy** - Full migration, hybrid, or selective approach ### Next actions by situation **For cost-conscious organizations** - Calculate current Alteryx TCO vs Mammoth subscription - Identify workflows suitable for business user migration - Plan Alteryx license reduction strategy **For teams struggling with Alteryx complexity** - Focus on which business users can build their own workflows - Measure training time against your Alteryx baseline - Evaluate self-service adoption potential **For hybrid approach candidates** - Map workflows by complexity and user type - Design complementary usage patterns - Plan specialist vs business user tool allocation --- # Migrating from Excel to Mammoth URL: https://mammoth.io/docs/migration/from-excel/ · Updated: 2026-11-02 Move Excel workflows to Mammoth pipelines: when to migrate, how formulas and pivots translate, and a four-phase process with parallel validation. This guide is for Excel power users whose workflows have become too large, too manual, or too error-prone for a spreadsheet. It explains when to migrate, how to translate familiar Excel functions into Mammoth pipeline tasks, and how to validate results before switching. It organizes Excel's limits into three groups: volume, variety, and velocity. ## When Excel hits its limits: The 3 Vs Excel struggles in three areas: volume, variety, and velocity. Knowing which one affects your workflow helps you decide when to migrate. ### Volume: Beyond Excel's row limits **Excel's constraints**: - Hard limit: 1,048,576 rows - Practical performance limit: 100,000-500,000 rows - Crashes and slowdowns with complex formulas on large datasets - Memory limitations causing frequent "Not Responding" messages **Mammoth's scale**: - Datasets are not capped at Excel's row limit - Transformations run on Mammoth's servers instead of your laptop's memory **Migration trigger**: If your Excel files regularly reach 100K+ rows or crash during processing, move the heavy processing to Mammoth. ### Variety: Multiple data sources **Excel's challenges**: - Manual copy/paste between systems - Format inconsistencies across sources - Version control nightmares with multiple files - No native database connectivity for business users **Mammoth's integration**: - Connectors for databases, APIs, and cloud storage - Repeatable cleaning and standardization steps in a pipeline - One shared Dataset instead of many file versions - Live Connections replace manual downloads **Migration trigger**: If you manually download from several systems and combine the files in Excel, replace that work with Live Connections and a pipeline. ### Velocity: Manual refresh and distribution **Excel's friction**: - Manual refresh dependent on human action - Email distribution requiring personal intervention - Data freshness limited by manual update frequency - Error-prone manual processes during time pressure **Mammoth's automation**: - Scheduled refreshes at minute, hour, day, week, or month intervals - Automated email distribution with the latest data - Dashboards that update when your data does - Automations for dataset refresh, data consolidation, and messaging **Migration trigger**: If you manually refresh and redistribute Excel reports on a schedule, replace that work with an automation. ## Excel function translation guide Most Excel functions have a matching Mammoth task. The sections below show how common function families translate. ### Lookups & joins **Excel approach**: ```excel =VLOOKUP(A2,'Customer Table'!A:D,2,FALSE) =INDEX(MATCH(A2,'Product Table'!A:A,0)) ``` **Mammoth equivalent**: - **Lookup** transformation with visual interface - Select the view to look up from - Choose matching columns from dropdowns - Preview results before applying **Benefit**: No formula syntax to remember, and the logic is visible to teammates as a task. ### Conditional logic **Excel approach**: ```excel =IF(AND(B2>1000,C2="Premium",D2>=TODAY()-30),"Priority","Standard") ``` **Mammoth equivalent**: - **AI SQL Query**: describe the logic in plain English ("Flag rows where amount > 1000 and category is Premium and date is in the last 30 days") and review the generated `CASE WHEN` SQL before applying - **Conditional Filter** to keep or remove rows that match conditions **Benefit**: Conditions are described in plain language instead of nested formulas. ### Text manipulation **Excel approach**: ```excel =LEFT(A2,5) & "-" & RIGHT(B2,3) =PROPER(TRIM(C2)) ``` **Mammoth equivalent**: - **Extract Text** for pattern-based extraction - **Combine columns & text** for concatenation - **Text Formatting** for case and spacing **Benefit**: Results are previewed before you apply the task. ### Aggregations & pivot tables **Excel approach**: - SUMIF, COUNTIF, AVERAGEIF formulas - Manual pivot table creation and formatting - Refresh complications with data changes **Mammoth equivalent**: - **Group & Pivot** transformation - **Window function** (Accumulate) for running totals - Automatic handling of new data in refreshes **Benefit**: The pivot logic is reapplied when the data refreshes, with no manual rebuild. ## Migration decision framework Not every Excel workflow needs to migrate. Use these lists to decide which ones stay in Excel and which move to Mammoth. ### Stay with Excel when: - **Dataset under 50,000 rows** and not growing - **One-time analysis** with no recurring need - **Simple calculations** without complex transformations - **No collaboration** or sharing requirements - **Static data** with no refresh needed - **Heavy charting** and presentation formatting ### Migrate to Mammoth when: - **Dataset exceeds 100,000 rows** or growing rapidly - **Process runs weekly/monthly** (repeatable workflow) - **Multiple data sources** need combining - **Manual errors** causing business impact - **Team collaboration** required - **Automated refresh and distribution** needed - **Audit trail** and compliance documentation required ### Hybrid approach: Mammoth for preparation, Excel for analysis You can use both tools: - **Mammoth for**: Data preparation, transformation, large-scale processing, automation - **Excel for**: Final analysis, pivot tables, charts, presentations, executive formatting - **Connection**: Export clean data from Mammoth to Excel for final analysis This split keeps Excel for the analysis it does well and moves the heavy preparation work to Mammoth. ## Step-by-step migration process ### Phase 1: Document your Excel workflow Before touching Mammoth, understand what you're migrating: 1. **List your data sources**: Where does your data come from? (CSV downloads, database exports, email attachments) 2. **Map your transformation steps**: What calculations, lookups, and cleaning do you perform? 3. **Identify your outputs**: Who receives the results and in what format? 4. **Note pain points**: Where do errors occur? What takes the most time? **Example documentation**: ```plaintext Data sources: - Weekly sales CSV from Salesforce (manual download) - Product catalog Excel from marketing team (email) Transformations: - VLOOKUP to add product categories - Calculate commission percentages - Filter for active customers only - Pivot table by region and product Outputs: - Email pivot table to sales managers - Export summary to PowerPoint for executives Pain points: - Salesforce download often delayed - Product catalog changes break VLOOKUP - Manual email distribution every Monday ``` ### Phase 2: Recreate in Mammoth Start simple and build confidence: 1. **Connect your data sources** - Upload your Excel files to create Datasets - Or set up Live Connections for automated refresh 2. **Build your Pipeline step by step** - Use **Lookup** instead of VLOOKUP - **Math function** for mathematical operations - **Conditional Filter** for row filtering - **Group & Pivot** for summarization 3. **Validate at each step** - Use Explore Cards to spot-check your data - Compare intermediate results to your Excel process - Preview transformations before applying 4. **Compare final outputs** - Export from Mammoth and compare to Excel side-by-side - Verify row counts and key metrics match - Document any approach differences ![Pipeline editor with a file upload Source, a Lookup task with Auto-sync on, and a Window function task beside the table.](https://mammoth.io/docs/images/20260508_140634_MammothPipelineshowingExcel.webp) ### Phase 3: Test & validate Run parallel processes to ensure accuracy: 1. **Process identical input data** in both Excel and Mammoth 2. **Compare outputs systematically**: - Row counts by category - Sum totals for key metrics - Spot-check individual records 3. **Resolve discrepancies** by reviewing transformation logic 4. **Document differences** for team training > Tip: Use one source file\ Use the same source data file for both Excel and Mammoth testing. This eliminates data differences and focuses validation on transformation logic. ### Phase 4: Production deployment Move the validated workflow into regular use: 1. **Set up automation** (if needed): - Configure automations for scheduled refresh - Set up automated email distribution - Create shared dashboards for stakeholders 2. **Train your team**: - Document the new Mammoth workflow - Show stakeholders how to access results - Create troubleshooting guide for common issues 3. **Monitor initial runs**: - Verify first automated runs complete successfully - Check that outputs reach recipients correctly - Address any issues quickly ## Common migration challenges & solutions ### Challenge 1: "My Excel formulas are very complex" **The concern**: Years of nested formulas with business logic that's hard to translate. **Solution**: Use Mammoth's **AI Prompt** transformation for complex logic: - Describe your logic in plain English - Example: "Flag rows where amount > 1000 and category in ['A','B','C'] and date is last 30 days" - Alternative: Break one complex formula into multiple simple Pipeline steps **Benefit**: Each condition is a separate, readable step. ### Challenge 2: "I rely heavily on Excel pivot tables" **The concern**: Pivot tables are Excel's strength for interactive analysis. **Solution**: Use Mammoth for data preparation, Excel for final analysis: - Mammoth: **Group & Pivot** transformation to summarize large datasets - Export summarized data to Excel for final pivot table analysis - Result: Process large datasets in Mammoth, analyze in familiar Excel interface **Benefit**: You keep familiar analysis tools while Mammoth handles the volume. ### Challenge 3: "My stakeholders need Excel files" **The concern**: Recipients expect Excel format for compatibility and familiarity. **Solution**: Maintain Excel output while automating creation: - Build Pipeline in Mammoth for data processing - Download the View as XLSX (limited to Views under 50,000 rows; use CSV for larger ones) - Use a **Messaging** automation for scheduled email delivery (Views attach as CSV) **Process**: Mammoth Pipeline → XLSX download for ad-hoc sharing, or Messaging automation → CSV by email **Benefit**: Recipients still get the format they expect while the creation is automated. ### Challenge 4: "I have years of historical Excel analysis" **The concern**: Don't want to lose years of accumulated analysis and formulas. **Solution**: Keep historical Excel, transition NEW workflows to Mammoth: - Archive existing Excel analysis for reference - Start using Mammoth for current-forward workflows - Don't recreate past analysis—focus on future value **Benefit**: No backfill effort, and the historical analysis stays available. ### Challenge 5: "Learning new tools takes time" **The concern**: Training overhead and productivity drop during transition. **Solution**: Start small and use concepts you already know: - Start with one simple workflow to build confidence - Use familiar concepts (filters, lookups) with visual interface - Expand gradually as comfort increases ## Suggested four-stage rollout ### Week 1: Proof of concept Choose your most painful weekly Excel process: - High manual effort (1+ hours weekly) - Error-prone steps - Multiple stakeholder recipients - Growing data volume Start simple, prove value quickly. ### Week 2: Parallel processing Run Excel and Mammoth side-by-side: - Same input data, compare outputs - Build confidence in Mammoth results - Note how much manual effort you save - Identify workflow improvements ### Week 3: Full migration Replace Excel process with Mammoth: - Set up automation (if applicable) - Train stakeholders on new process - Monitor first few runs carefully - Measure the time you save ### Month 2+: Expand usage Apply learnings to other Excel workflows: - Tackle next most painful process - Share successes with team - Share templates and conventions across the team - Explore advanced features > Tip: Start with the most painful process\ Start with your most painful Excel process, not your most complex. An early win makes later migrations easier to justify. ## Next steps after reading this guide Use this action plan to start your migration: ### Immediate actions (this week) 1. **Identify candidate workflows**: List your most time-consuming Excel processes 2. **Try Mammoth**: Upload one of your Excel files 3. **Build simple pipeline**: Replicate one transformation to see the difference ### Short-term goals (this month) 1. **Complete first migration**: Choose one weekly process to fully migrate 2. **Measure impact**: Document time savings and accuracy improvements 3. **Train stakeholders**: Help recipients adapt to new process ### Long-term vision (next quarter) 1. **Expand systematically**: Migrate 2-3 additional Excel workflows 2. **Build team capabilities**: Train colleagues on Mammoth best practices 3. **Optimize operations**: Use saved time for higher-value analysis Moving from Excel to Mammoth reuses concepts you already know, such as lookups, filters, and pivots, while adding larger datasets and automated refresh and delivery. See the [Migration checklist](https://mammoth.io/docs/migration/migration-checklist/) for a project plan. --- # Migrating from Power Query URL: https://mammoth.io/docs/migration/from-power-query/ · Updated: 2026-11-02 Decide whether Mammoth complements or replaces Power Query: comparison, hybrid architecture with Power BI, step and M code translation, timeline. This guide is for Microsoft Power Query users who hit collaboration limits, scale constraints, or team coordination problems. It shows how to use Mammoth for heavy data preparation while keeping Power BI for visualization and analysis, and when it makes sense to replace Power Query workflows instead. It covers a comparison of the two tools, hybrid and replacement patterns, a step-by-step translation guide, and a migration timeline. ## Understanding Power Query's role ### Power Query strengths Power Query is strong in these areas for Microsoft-centric organizations: **Microsoft integration**: Native connectivity with Excel, Power BI, Azure Data Factory, Dynamics 365, and SharePoint. **Familiar interface**: Excel power users adapt quickly to Power Query's ribbon interface and formula-like approach to data transformation. **M language**: Advanced users can write custom transformations in M for specialized business logic. **Included licensing**: Power Query is included with Excel and Power BI licenses. ### When Power Query users seek alternatives Power Query users usually look for a complementary tool because of specific limitations: **Collaboration challenges** Power Query transformations are embedded within individual Excel workbooks or Power BI files. Consolidating files with Power Query often still requires extensive manual setup in each workbook. Common collaboration pain points include: - Team members recreating identical transformations independently - No centralized transformation logic or version control - File-based sharing through OneDrive creates version conflicts - Knowledge dependency on individuals who built the M code **Scale limitations** Power Query performance is tied to Excel and Power BI Desktop constraints. Organizations processing large datasets encounter: - Memory limitations in the Excel environment - Desktop Power BI dataset size restrictions - Refresh times that grow with row count - Gateway requirements for scheduled refresh adding complexity **Complexity management** As transformations grow sophisticated, M code maintenance becomes challenging: - Debugging complex queries requires specialized M language skills - No visual workflow documentation or versioning - Team knowledge concentrated in M language experts - Difficulty scaling transformation logic across team members > Tip: Complement before you replace\ Use Mammoth for scale-intensive data preparation, then export to formats that Power Query can consume for final analysis and visualization. ## Power Query vs Mammoth comparison ### Data transformation capabilities Both platforms offer extensive transformation libraries, but their approaches differ: **Power Query**: The M language supports custom, code-based logic. The visual interface covers common transformations, with formula-bar editing for advanced scenarios. **Mammoth**: AI-powered transformations accept natural language prompts. The visual pipeline builder creates reusable sequences of tasks that business users can build without writing code. **Example comparison**: ```M // Power Query M code if [Amount] > 1000 and [Category] = "A" then "High" else "Low" ``` **Mammoth AI SQL Query**: "Flag rows as 'High' if amount over 1000 and category A, otherwise 'Low'" ### Integration & ecosystem **Power Query**: Native Microsoft ecosystem integration, including Azure SQL Database, SharePoint lists, Dynamics 365, and Power Platform connectivity. **Mammoth**: Connectors for databases, cloud storage, and business apps, including Microsoft sources such as SQL Server and SharePoint, plus third-party sources such as Salesforce and Snowflake. See the connector list in your workspace for the current set. **Complementary approach**: Mammoth processes data from multiple sources, then exports to formats Power Query consumes (CSV, XLSX downloads, database tables) for final Microsoft ecosystem integration. ### Collaboration & version control **Power Query**: Transformations are file-based, embedded in workbooks or Power BI files. Collaboration requires manual file coordination through SharePoint or OneDrive. **Mammoth**: Centralized pipelines in shared workspaces support team collaboration, and pipeline version history lets you restore an earlier version (available on some plans). ### Scale & performance **Power Query**: Performance tied to Excel/Power BI Desktop hardware limitations. Refresh times grow with dataset size. **Mammoth**: Cloud-based processing is not limited by your desktop's memory. ### Automation and scheduling **Power Query**: Requires Power BI Service (Premium) or separate tools like Azure Data Factory for automated refresh scheduling. **Mammoth**: Built-in automations handle scheduled dataset refresh, file consolidation, and email messaging without additional Microsoft licensing. ## Strategic approaches: Complement vs replace ### Complement approach: Mammoth prepares, Power Query analyzes In this approach Mammoth handles preparation and Power Query keeps the final analysis: **Mammoth handles**: - Heavy data transformation and cleansing - Multi-source consolidation at enterprise scale - Automated scheduled data processing - Team collaboration on transformation logic - Historical data accumulation and batch processing **Power Query handles**: - Integration with existing Power BI reports - Excel-based analysis and pivot tables - Microsoft ecosystem final deliverables - Quick ad-hoc analysis on prepared datasets - Real-time refresh for operational dashboards **Integration points**: - Mammoth exports to SQL Server or SharePoint - Power Query refreshes from Mammoth-prepared datasets - Combined workflow: Mammoth heavy lifting → Power Query polish → Power BI visualization **Example**: A manufacturing team consolidates daily store files in Mammoth, applies complex transformations, then exports to SQL Server. Power Query in Power BI connects to prepared tables for visualization and executive reporting. ### Replace approach: when to retire Power Query workflows Consider replacing Power Query workflows when: **Collaboration challenges outweigh integration benefits**: Teams spending more time coordinating transformations than benefiting from Microsoft integration. **Scale requirements exceed performance**: Datasets large enough to cause Power Query refresh failures or timeout issues. **The team lacks M language maintenance skills**: Organizations without dedicated Power Query developers struggling to maintain complex M code. **Automation requirements are complex**: Scheduled refresh, file consolidation, or messaging workflows beyond Power BI Service capabilities. **Keep Power Query when**: - Deep Power BI Premium investment with real-time requirements - Strong M language expertise in organization - Simple transformations not requiring team collaboration - Budget constraints preventing additional tool adoption ## Migration patterns ### Pattern 1: Hybrid architecture **Implementation**: 1. **Mammoth**: Data consolidation, cleansing, large-scale processing 2. **Export**: Mammoth sends prepared data to SQL Server 3. **Power Query**: Connects to prepared database tables 4. **Power BI**: Visualization using Power Query datasets **Benefits**: - Mammoth provides shared pipelines and cloud-side processing - Maintain existing Power BI report investments - Clear separation of concerns: Preparation vs Analysis **Implementation steps**: 1. Connect your data sources to Mammoth 2. Build a pipeline for data preparation and cleansing 3. Configure export to SQL Server 4. Modify Power Query to source from prepared database tables 5. Maintain Power BI reports on the prepared tables ### Pattern 2: Team collaboration migration **Scenario**: Teams sharing Power Query workbooks with coordination overhead **Before**: - Several analysts maintaining separate Power Query workbooks - Transformation logic duplicated across team members - Version conflicts from OneDrive file sharing - Manual coordination of updates via email **After**: - Shared Mammoth workspace with centralized Pipelines - Team collaborates on single transformation logic - Pipeline version history lets you restore earlier versions (available on some plans) - Individual analysts export to their preferred analysis formats **Migration process**: 1. Create shared Mammoth workspace for the team 2. Migrate most common transformations to shared Pipelines 3. Train team on Pipeline collaboration workflow 4. Establish export processes to individual analysis tools 5. Gradually expand Pipeline coverage based on team needs ### Pattern 3: Scale-driven migration **Scenario**: Power Query performance degradation with growing datasets **Problem indicators**: - Long or failing refreshes - Excel memory errors or crashes with large datasets - Power BI Desktop dataset size hitting limits - Manual workarounds to process data in smaller batches **Solution architecture**: 1. **Mammoth**: Processes the full dataset in the cloud 2. **Overnight processing**: Scheduled automation during off-hours 3. **Aggregation**: Mammoth creates summary tables sized for Power Query 4. **Faster refresh**: Power Query connects to the smaller aggregated datasets ## Translation guide: Power Query to Mammoth ### Common Power Query steps and Mammoth equivalents **Source connection**: - Power Query: "Source" step with connection parameters - Mammoth: Dataset creation from a connector or file upload **Filter rows**: - Power Query: "Filtered Rows" step with filter conditions - Mammoth: Conditional Filter transformation with visual rule builder **Remove columns**: - Power Query: "Removed Columns" step selecting columns to delete - Mammoth: Remove Column transformation **Change data types**: - Power Query: "Changed Type" step with column type definitions - Mammoth: Convert Column Type transformation **Replace values**: - Power Query: "Replaced Values" step for find/replace operations - Mammoth: Find & Replace or Bulk Replace transformation (AI-powered for variations) **Merge queries (joins)**: - Power Query: "Merged Queries" step with join type selection - Mammoth: Join or Lookup transformation with preview capabilities **Group by aggregation**: - Power Query: "Grouped Rows" step with aggregation functions - Mammoth: Group & Pivot transformation **Add custom column**: - Power Query: "Added Custom Column" with M formula - Mammoth: Math function for arithmetic, or AI SQL Query for logic described in plain English **Append queries**: - Power Query: "Appended Queries" combining multiple sources - Mammoth: Data Consolidation automation, or Send to dataset (Combine data) ### M code translation examples **Complex conditional logic**: ```M // Power Query M code = Table.AddColumn( Source, "Risk Category", each if [Amount] > 10000 and [Type] = "Investment" then "High Risk" else if [Amount] > 5000 then "Medium Risk" else "Low Risk" ) ``` **Mammoth equivalent**: AI SQL Query transformation: *"Create Risk Category column: 'High Risk' for Investment amounts over $10,000, 'Medium Risk' for amounts over $5,000, otherwise 'Low Risk'"* **Date calculations**: ```M // Power Query M code = Table.AddColumn( Source, "Days Since Order", each Duration.Days(DateTime.Date(DateTime.LocalNow()) - [Order_Date]) ) ``` **Mammoth equivalent**: Calculate date difference transformation: *days between Order_Date and Current Time (UTC)* > Tip: Do not translate all M code at once\ Focus on new workflows in Mammoth while keeping critical legacy transformations in Power Query. This reduces migration risk. ## Common migration challenges ### Challenge 1: "I have years of M code investment" **Solution**: Incremental adoption focusing on new workflows rather than backfill translation. **Approach**: - Keep critical, stable M code in Power Query - Route new data processing projects through Mammoth - Gradually migrate high-maintenance or collaborative transformations **Benefit**: New work moves forward without disrupting working processes or requiring a complete M code rewrite. ### Challenge 2: "Power BI reports depend on Power Query datasets" **Solution**: Mammoth exports to formats Power Query can consume without breaking existing reports. **Architecture options**: - Export to SQL Server → Power Query connects to tables - Export to SharePoint or OneDrive → Power Query SharePoint folder connection - Download as CSV or XLSX → Power Query file connection **Benefit**: Existing Power BI reports keep working while Mammoth takes over preparation. ### Challenge 3: "Our team knows M language, not Mammoth" **Solution**: Mammoth's visual pipeline needs no code, so business users can start without learning M. **Approach**: - M language experts maintain legacy transformations - Business users adopt Mammoth for new requirements - Gradually extend data preparation beyond M specialists **Benefit**: The team gains a no-code option without losing existing M expertise. ### Challenge 4: "Microsoft ecosystem integration is essential" **Solution**: Mammoth complements Microsoft stack rather than replacing it. **Integration points**: - Connectors for SQL Server and SharePoint - Export to SQL Server and SharePoint, and CSV or XLSX downloads, for Power BI and Excel - The Mammoth API for custom integrations **Benefit**: Mammoth fits into the Microsoft stack rather than replacing it. ### Challenge 5: "We need real-time Power BI refresh" **Solution**: Evaluate true real-time needs vs scheduled refresh sufficiency. **Typical case**: Scheduled refresh (as often as every few minutes or hours) through a Mammoth automation meets "real-time" business requirements. **True real-time**: Keep Power Query for millisecond-latency scenarios, use Mammoth for batch processing and historical analysis. ## Getting started with your migration ### Assessment questions before migrating Answer these questions to evaluate your situation: 1. **What percentage of time does your team spend coordinating transformations?** (High coordination overhead = strong Mammoth fit) 2. **Are you hitting Power Query performance or size limitations?** (Scale issues = a strong case for Mammoth) 3. **How critical is real-time integration with Power BI?** (Batch processing acceptable = hybrid approach viable) 4. **What's your team's M language expertise level?** (Limited M skills = a no-code option helps) 5. **Do you need audit trails and version control?** (Compliance requirements = review Mammoth's version history and permissions) ### Migration timeline **Weeks 1-2: Assessment and planning** - Catalog existing Power Query transformations - Identify collaboration pain points and scale limitations - Plan hybrid architecture (Mammoth + Power Query integration) - Set up Mammoth workspace and initial data connections **Weeks 3-4: Pilot implementation** - Migrate 1-2 high-value transformations to Mammoth - Configure export to database or file formats for Power Query consumption - Test Power BI report integration with prepared data - Train initial team members on pipeline development **Month 2: Team adoption** - Expand Pipeline coverage to additional transformations - Establish team collaboration workflows in Mammoth - Configure automations for recurring processes - Document hybrid architecture patterns for future projects **Month 3+: Scale and optimization** - Migrate complex or high-maintenance M code transformations - Optimize export formats and refresh schedules - Establish governance patterns for team Pipeline development - Measure collaboration and performance improvements against your baseline ### Integration practices **Start small**: Begin with standalone transformations rather than complex, interdependent workflows. **Maintain parallel systems**: Keep Power Query workflows operational during migration testing to reduce risk. **Focus on team pain points**: Prioritize transformations causing collaboration overhead or performance issues. **Document integration patterns**: Establish standard approaches for Mammoth → Power Query → Power BI workflows. **Train incrementally**: Focus training on Pipeline development rather than comprehensive platform features initially. --- # Python/pandas comparison URL: https://mammoth.io/docs/migration/from-python-pandas/ · Updated: 2026-11-02 Compare Mammoth pipelines with Python pandas for loading, filtering, joins and aggregations, with a worked example and hybrid patterns using the SDK. This guide is for Python developers evaluating Mammoth. It compares visual pipeline development with code-based data manipulation in pandas, shows how common pandas operations map to Mammoth tasks, and describes how the two can work together. **Key takeaways**: - **Different strengths**: pandas for custom algorithms, Mammoth for data preparation - **Step preview**: Mammoth previews each task as you build it - **Team collaboration**: Business users can build and maintain pipelines without code - **Hybrid approach**: Use both tools for the parts each handles best ## Philosophy differences ### Python/pandas approach - **Code-first**: Write scripts to transform data - **Technical focus**: Requires programming knowledge - **Flexible**: Custom logic through code - **Version control**: Scripts tracked in git ### Mammoth approach - **Visual-first**: Build pipelines through interface - **Business logic focus**: Accessible to non-programmers - **Guided**: A library of transformation tasks with preview - **Collaborative**: Share pipelines without code execution Both approaches transform data. They serve different users and use cases. ## When to use each tool ### Python/pandas better for **Custom algorithms** ```python # Complex statistical calculations def calculate_customer_lifetime_value(df): # Custom CLV algorithm with multiple parameters return df.groupby('customer_id').apply(custom_clv_logic) ``` **Machine learning integration** - Model training and evaluation - Feature engineering with scikit-learn - Statistical analysis requiring specialized libraries - Integration with TensorFlow, PyTorch **Advanced statistical analysis** - Hypothesis testing - Time series modeling - Custom aggregations requiring complex logic ### Mammoth better for **Business-user self-service** - Non-technical team members can build pipelines - No programming required - Visual documentation (pipeline diagrams) **Rapid data preparation** - Step-by-step preview, plus Draft mode for iterating on a pipeline - AI-assisted step generation from the AI Prompt bar **Team collaboration** - Share pipelines without requiring code execution environment - Business users can modify and maintain workflows - Built-in data profiling and quality assessment **Production data operations** - Automated scheduling through Automations - Connectors to databases, APIs, and cloud storage - Pipeline health and Data Check steps for monitoring > Tip: Consider a hybrid approach\ Use Mammoth for data preparation (cleaning, joining, aggregating) and Python for advanced analytics (modeling, statistical analysis). Export clean data from Mammoth to CSV or database, then analyze with your Python tools. ## Feature-by-feature comparison ### Data loading **Pandas**: ```python # Multiple formats and sources df = pd.read_csv('sales.csv') df = pd.read_excel('sales.xlsx', sheet_name='Q1') df = pd.read_sql("SELECT * FROM orders", connection) df = pd.read_json('api_response.json') ``` **Mammoth equivalent**: - File upload for common file formats such as CSV and Excel - Connectors for databases, APIs, and cloud storage **Winner**: Mammoth for ease of use, Pandas for programmatic control ![New Dataset dialog with Connectors selected, showing tiles for Salesforce, SharePoint, Shopify, Snowflake and SQL Server.](https://mammoth.io/docs/images/20260427_171231_Connector_screen.webp) ### Data filtering **Pandas**: ```python # Single and multiple conditions df = df[df['status'] == 'active'] df = df[(df['amount'] > 100) & (df['date'] > '2024-01-01')] df = df[df['category'].isin(['A', 'B', 'C'])] df = df[~df['email'].isna()] ``` **Mammoth equivalent**: - Conditional Filter transformation - Visual condition builder (no syntax errors) - Multiple conditions - Preview shows exactly which rows will be kept/removed **Winner**: Pandas for complex conditions, Mammoth for business user accessibility ### Column operations **Pandas**: ```python # Selection, calculation, combination df = df[['name', 'amount', 'date']] df['total'] = df['price'] * df['quantity'] df['full_name'] = df['first_name'] + ' ' + df['last_name'] df['profit_margin'] = (df['revenue'] - df['cost']) / df['revenue'] df = df.drop(['temp_col'], axis=1) ``` **Mammoth equivalent**: - Remove Column transformation - Math function (arithmetic on columns, with preview) - Combine columns & text (concatenation with separators) - Add Column - All with visual configuration panels **Winner**: Similar capabilities, Pandas more flexible, Mammoth more accessible ### Data type conversion **Pandas**: ```python # Type conversion with error handling df['date'] = pd.to_datetime(df['date'], errors='coerce') df['amount'] = pd.to_numeric(df['amount'], errors='coerce') df['category'] = df['category'].astype('category') ``` **Mammoth equivalent**: - Convert Column Type transformation - Date format selection - Visual type indicators in data grid - Preview conversion results before applying **Winner**: Mammoth for ease of use and error prevention ![Convert Column Type panel turning order_date into Text in YYYY/MM/DD format; unconvertible values become null.](https://mammoth.io/docs/images/20260508_140734_ConvertColumnTypeconfigurationpanel.webp) ### Aggregations and group by **Pandas**: ```python # Complex aggregations summary = df.groupby(['region', 'category']).agg({ 'sales': ['sum', 'mean'], 'orders': 'count', 'customers': 'nunique' }).reset_index() # Time-based grouping monthly = df.groupby(pd.Grouper(key='date', freq='M')).sum() ``` **Mammoth equivalent**: - Group & Pivot transformation - Aggregations such as Sum, Average, Min, Max, Std Dev, Count, and Distinct count - Visual grouping interface with column selection **Winner**: Pandas for complex custom aggregations, Mammoth for standard business aggregations ### Joins and merges **Pandas**: ```python # Various join types result = pd.merge(df1, df2, on='customer_id', how='left') result = df1.join(df2.set_index('key'), on='key', how='inner') # Multiple key joins result = pd.merge(df1, df2, left_on=['date', 'store'], right_on=['order_date', 'location']) ``` **Mammoth equivalent**: - Join transformation (Left, Right, Inner, Outer) - Lookup transformation (pull one column from another view by key) - Visual join key selection **Winner**: Similar capabilities for common joins; Pandas for unusual join logic ### String operations **Pandas**: ```python # String manipulation df['clean_name'] = df['name'].str.strip().str.upper() df['domain'] = df['email'].str.extract(r'@(.*)') df['area_code'] = df['phone'].str[:3] df['standardized'] = df['company'].str.replace('Corp.', 'Corporation') ``` **Mammoth equivalent**: - Text Formatting (upper, lower, proper case, trim) - Extract Text (describe the pattern in plain language, or configure it directly) - Find & Replace (pattern matching and substitution) - Bulk Replace (many-to-one mappings with AI-suggested groups) **Winner**: Pandas for complex regex, Mammoth for business-friendly text operations ![Bulk Replace panel on product_name with Group Suggestions that merge spelling variants of the same product name.](https://mammoth.io/docs/images/20260508_140717_BulkReplaceinterfaceshowingAI-suggested.webp) ## Performance comparison ### Processing scale **Pandas**: Limited by local machine memory and CPU.\ **Mammoth**: Processing runs on Mammoth's cloud infrastructure, so it does not depend on your machine's memory. Benchmark both tools on your own data before deciding. ### Development cycle **Pandas**: Write code, run it, debug, test with different data, then document and review. **Mammoth**: Configure each step visually, preview the result, and adjust. Each task documents itself in the pipeline. **Winner**: Mammoth for data preparation tasks, Pandas for complex custom logic > Tip: Use Draft mode\ Use Draft mode in Mammoth to try changes to a pipeline before committing them. ## Team collaboration comparison ### Code-based collaboration (pandas) **Advantages**: - Version control through git - Code review processes - Reproducible analysis (run script anywhere) - Documentation through comments and docstrings **Challenges**: - Requires Python knowledge across entire team - Onboarding requires Python skills - Debugging requires technical troubleshooting skills - Sharing requires Python environment setup ### Visual-based collaboration (Mammoth) **Advantages**: - Business users build pipelines without coding - Visual pipeline serves as documentation - New team members don't need to learn a programming language - Instant sharing through Published Views and dashboards - Built-in data profiling accessible to everyone **Challenges**: - Pipeline logic is not kept in a code repository; use pipeline version history to restore earlier versions (available on some plans) - Limited to platform's transformation capabilities - Custom algorithms require API integration or export ## Real-world migration example This example builds the same data pipeline in both approaches. ### Scenario: Sales performance analysis **Goal**: Combine customer data with sales transactions, clean the data, and create monthly summaries by region. ### Pandas implementation ```python import pandas as pd import numpy as np from datetime import datetime def process_sales_data(): # Load data from multiple sources customers = pd.read_sql(""" SELECT customer_id, name, email, region, segment FROM customers WHERE active = 1 """, crm_connection) transactions = pd.read_csv('sales_transactions.csv') # Clean and standardize customers['email'] = customers['email'].str.lower().str.strip() customers['name'] = customers['name'].str.title() # Convert dates and handle errors transactions['date'] = pd.to_datetime( transactions['date'], errors='coerce' ) transactions = transactions.dropna(subset=['date']) # Calculate derived fields transactions['total_amount'] = ( transactions['price'] * transactions['quantity'] ) # Join datasets merged = pd.merge( transactions, customers[['customer_id', 'name', 'region', 'segment']], on='customer_id', how='left' ) # Create monthly summaries monthly_summary = merged.groupby([ 'region', pd.Grouper(key='date', freq='M') ]).agg({ 'total_amount': 'sum', 'transaction_id': 'count', 'customer_id': 'nunique' }).reset_index() # Rename columns for clarity monthly_summary.columns = [ 'region', 'month', 'total_revenue', 'transaction_count', 'unique_customers' ] # Export results monthly_summary.to_excel( f'sales_summary_{datetime.now().strftime("%Y%m%d")}.xlsx', index=False ) return monthly_summary # Execute result = process_sales_data() print(f"Processed {len(result)} monthly summaries") ``` **Lines of code**: about 50 ### Mammoth implementation **Pipeline tasks**: 1. **Connector**: CRM database (customers table) 2. **File upload**: sales_transactions.csv 3. **Text Formatting**: Email to lowercase, Name to proper case 4. **Convert Column Type**: Date column 5. **Conditional Filter**: Remove rows with invalid dates 6. **Math Function**: total_amount = price × quantity 7. **Join**: Transactions LEFT JOIN Customers on customer_id 8. **Group & Pivot**: Group by region + month, aggregate sum/count/distinct 9. **Export**: Download the View as XLSX, or send it to a destination **Pipeline length**: 9 tasks ## Migration strategies ### Gradual migration approach **Phase 1: Identify use cases** - **Keep in Pandas**: Custom algorithms, ML model development, statistical analysis - **Move to Mammoth**: Data cleaning, joining, standard aggregations, reporting prep - **Hybrid workflows**: Mammoth prep → export → Pandas analysis **Phase 2: Parallel operation** - Maintain existing Pandas scripts initially - Rebuild data preparation portions in Mammoth - Validate outputs match between both approaches - Train team on visual pipeline development **Phase 3: Integration points** - Mammoth Live Links → Pandas read_csv() - Python analysis results → Database → Mammoth connector - API integration for programmatic pipeline control - Scheduled Automations for production workflows > Tip: Start with repetitive tasks\ Begin with your most repetitive data preparation tasks. They are the easiest to validate against your existing scripts. ### Common translation patterns | pandas pattern | Mammoth equivalent | Notes | | --- | --- | --- | | `df.groupby().agg()` | Group & Pivot | Multiple aggregation functions supported | | `pd.merge()` | Join transformation | Visual join key selection | | `str.extract()` | Extract Text | Describe the pattern in plain language, or configure it directly | | `fillna()` | Fill Missing Values | Fill from above or below, or Smart fill (no constant value) | | `pivot_table()` | Group & Pivot | Cross-tabulation with preview | | `df[condition]` | Conditional Filter | Visual condition builder | | `pd.to_datetime()` | Convert Column Type | Pick the date format | ## Hybrid workflow patterns ### Pattern 1: Data prep → advanced analytics ```python # 1. Mammoth handles data preparation # (visual pipeline: clean, join, aggregate) # 2. Python handles advanced analytics import pandas as pd from sklearn.cluster import KMeans # Load clean data from Mammoth df = pd.read_csv('mammoth_output.csv') # Advanced analysis requiring specialized libraries model = KMeans(n_clusters=5) df['customer_segment'] = model.fit_predict(df[['recency', 'frequency', 'monetary']]) # Statistical analysis correlation_matrix = df.corr() significance_test = stats.chi2_contingency(contingency_table) ``` ### Pattern 2: Model development → production deployment ```python # 1. Python for model development and validation model = train_customer_churn_model(historical_data) accuracy = validate_model(model, test_data) # 2. Mammoth for production scoring pipeline # - Connector to the customer database # - Feature engineering pipeline # - Scoring rules expressed with AI SQL Query (Mammoth does not run Python models) # - Export predictions to a database destination ``` ### Pattern 3: API integration Trigger a Mammoth automation from Python with the `mammoth-io` SDK, wait for the view's pipeline, then read the prepared rows back for analysis: ```python import asyncio import os from mammoth import ( AutomationPatchItem, AutomationPatchOp, AutomationPatchPath, MammothClient, ) async def main(): async with MammothClient( api_token=os.environ["MAMMOTH_API_TOKEN"], ) as client: client.set_project_id(10) # Run the automation that refreshes the pipeline await client.automations.update( 42, [AutomationPatchItem(op=AutomationPatchOp.COMMAND, path=AutomationPatchPath.RUN, value={})], ) # Wait for the view's pipeline to finish await client.pipeline.wait_for_pipeline(dataview_id=1039, dataset_id=7) # Read the prepared rows and continue the analysis in Python return await client.dataviews.get_data(dataset_id=7, dataview_id=1039) result = asyncio.run(main()) ``` For setup details, see the [Python SDK reference](https://mammoth.io/docs/build/sdk/) and [Authentication](https://mammoth.io/docs/build/auth/). ## Making the decision ### Choose Mammoth when - Team includes non-technical users who need data access - Spending much of your time on data cleaning and preparation - Need rapid iteration and experimentation (Draft mode) - Require business user self-service capabilities - Want visual documentation of transformation logic - Need built-in scheduling ### Choose pandas when - Building custom algorithms or statistical models - Need full flexibility for complex transformations - Working primarily with data scientists and engineers - Require integration with specialized Python libraries - Have existing code base that works well - Need version control of transformation logic ### Choose both when - Large team with mixed technical skills - Need both rapid data prep AND advanced analytics - Want business users to build pipelines while engineers keep code-based control - Have complex workflows spanning multiple tools > Tip: This is not either/or\ You can use Mammoth for data preparation and Python for advanced analytics. The API and Python SDK support hybrid workflows. ## Migration steps: evaluate, pilot, roll out ### Step 1: Evaluation 1. Identify your most time-consuming data preparation tasks 2. Build one pipeline in Mammoth using sample data 3. Compare development time and ease of maintenance 4. Evaluate team member accessibility ### Step 2: Pilot project 1. Choose a representative data workflow 2. Build parallel implementations (keep Pandas, add Mammoth) 3. Validate outputs match exactly 4. Train team members on visual pipeline development 5. Measure time savings and team adoption ### Step 3: Gradual rollout 1. Migrate high-value, repetitive data preparation tasks 2. Establish hybrid workflow patterns 3. Create pipeline templates for common operations 4. Build team expertise and best practices 5. Integrate with existing Python analytics workflows The goal is not to replace all your Python work. Use Mammoth for accessible, collaborative data preparation and Python for advanced analytics and custom algorithms. --- # Migrating from Tableau Prep to Mammoth URL: https://mammoth.io/docs/migration/from-tableau-prep/ · Updated: 2026-11-02 Compare Tableau Prep and Mammoth, choose a complement or replace strategy, and follow a phased plan to rebuild flows as pipelines and dashboards. This guide is for Tableau Prep users who want to know whether Mammoth should complement or replace it. Both tools use a visual approach to data preparation. Mammoth adds an AI Prompt bar, built-in dashboards, and Automations. The central question is whether dashboard and data preparation requests keep going through a few trained specialists, or whether more of your team builds its own pipelines and dashboards. The guide covers the decision framework, a feature comparison, and a phased migration plan. ## Strategic positioning: Replace or complement? The right approach depends on your current tooling and dashboard needs. Use this decision framework: ### Path 1: Complement strategy **Choose this when**: - You have invested heavily in Tableau training - You need advanced analytics workspaces occasionally - Dashboard creation takes too long and frustrates stakeholders - You want more people to access data without losing Tableau expertise **How it works**: - Keep Tableau for sophisticated analytics - Use Mammoth for faster dashboard creation - Use Mammoth for data preparation requiring business user access - Send prepared data from Mammoth to Tableau (Export → Tableau) when advanced analytics are needed ### Path 2: Replacement strategy **Choose this when**: - You're evaluating dashboard tools for the first time - Most users struggle with Tableau Prep's technical requirements - Dashboard needs are primarily operational reporting - Cost reduction is a priority **How it works**: - Full migration to Mammoth for data prep + dashboards - Single platform from raw data to shared dashboards - Reduce the number of Tableau licenses you need - Export complex scenarios to other BI tools as needed > Tip: Quick test\ Ask yourself: "How long does it take to create a new dashboard?" If the answer is "too long", consider the complement strategy. If you do not currently use Tableau Desktop, consider replacement. ## Feature comparison: Technical capabilities This table compares core data preparation and visualization capabilities: | Feature category | Tableau Prep | Mammoth | Notes | | --- | --- | --- | --- | | **Interface** | Visual flow designer | Visual Pipeline in the browser | Both are visual; Mammoth runs in the cloud | | **Data preparation** | Flow steps and calculated fields | Pipeline steps, plus the AI Prompt bar that generates steps from a description | AI-generated steps are reviewed before you apply them | | **Dashboard creation** | None (requires Tableau Desktop) | Built in: Dashboards with an AI Dashboard Assistant | Mammoth covers preparation and dashboards in one product | | **Connectors** | Tableau Prep's connector list | Mammoth's connector list | Compare both lists against your sources | | **AI features** | Check current Tableau documentation | Extract Text, Bulk Replace, Generative AI, AI SQL Query | See the transform reference | | **Deployment** | Desktop application | Cloud, in the browser | | | **Dashboard sharing** | Tableau Server or Cloud | Publish & Share with Authenticated or Public access | Public means anyone with the link can view | ### Data preparation workflow comparison **Tableau Prep workflow**: 1. Connect to a data source 2. Visual flow designer with drag-drop steps 3. Data cleaning through calculated fields 4. Union, join, pivot operations 5. Export to file or publish to Tableau Server **Mammoth workflow**: 1. Connect through a connector, or upload a file 2. Profile the data with Explore Cards 3. Describe a transformation in the AI Prompt bar (for example, "Remove duplicates and standardize names"); it generates pipeline tasks you can review 4. Fine-tune each task in its function panel 5. Export to BI tools or databases, or create a dashboard from the View 6. Schedule refreshes with an automation ### AI-powered transformations compared **Extract Text with natural language**: - **User types**: "Give me the first word that begins with a number" - **System generates**: Regex pattern automatically - **Tableau Prep**: Requires manual calculated field creation with regex knowledge **Bulk Replace with AI grouping**: - Groups many unique values in a single operation - Three grouping algorithms: Smart, Spelling Match, Common Patterns - **Tableau Prep**: Manual find-replace only **Generative AI**: - Writes a new column row by row from a prompt and the context columns you pick (for example, sentiment or categories) - Uses your own AI provider key, with limits on output length and rows processed - Review the Preview before applying, because output can vary between runs - **Tableau Prep**: Requires custom calculated fields ## Dashboard creation in Mammoth versus the Tableau ecosystem Tableau Prep handles data preparation only, so dashboards need Tableau Desktop, and sharing needs Tableau Server or Tableau Cloud. Mammoth builds and shares dashboards in the same product. ### Tableau ecosystem requirements **Current pain points**: - Tableau Prep does data preparation only - Still need Tableau Desktop for dashboard creation - Separate training for dashboard authoring - Separate licensing for sharing with stakeholders ### Mammoth integrated workflow **Workflow**: - Data preparation and AI-assisted dashboard creation in one product - Create a dashboard from a View: pick the View, describe what you want, and refine it in the Dashboard Assistant editor - No separate dashboard tool to learn **Sharing** (Publish & Share, with an Access Type): - **Public**: Anyone with the link can view, including all of the dashboard's data - **Authenticated**: Viewers sign in to Mammoth > Tip: Prototype first\ Mammoth suits rapid dashboard prototyping before you commit to full Tableau development, and users who would otherwise wait on IT. ## Migration pathway: Step-by-step plan ### Assessment phase **Current state analysis**: 1. **Flow inventory**: List current Tableau Prep flows and their business purposes 2. **User assessment**: How many users actively create flows vs consume outputs? 3. **Dashboard requirements**: Frequency and complexity of dashboard creation needs 4. **Integration map**: Data sources, export destinations, sharing requirements **Readiness questions**: - How much time does your team spend in Tableau Prep each month? - How many dashboard requests wait in IT queues? - Which Tableau Prep flows could benefit from AI-powered automation? - How often do you need external stakeholder dashboard sharing? ### Migration strategy selection **Option A: Complement strategy** (suits teams with an existing Tableau investment) - **Timeline**: Run both tools in parallel while you validate - **Risk**: Low (Tableau expertise preserved) - **Benefits**: Faster dashboard creation for more users - **Best for**: Teams with significant Tableau training investment **Option B: Replacement strategy** (suits cost reduction) - **Timeline**: Depends on how many flows you recreate - **Risk**: Medium (requires workflow recreation) - **Benefits**: One vendor for preparation and dashboards - **Best for**: Teams frustrated with technical complexity ### Technical migration steps **Phase 1: Parallel operation** 1. **Environment setup**: - Create Mammoth workspace and projects - Connect your existing data sources - Set up user accounts and permissions 2. **Proof of concept**: - Replicate 3-5 representative Tableau Prep flows in Mammoth - Compare output quality, processing time, and user experience - Validate AI-generated transformations against manual flows 3. **User training**: - Mammoth interface orientation - Dashboard creation workshop - Best practices for AI transformation prompts **Phase 2: Workflow translation** 1. **Flow recreation**: - Document Tableau Prep transformation logic - Implement using the AI Prompt bar where possible - Use each step's function panel for precise control where needed - Set up Automations for scheduled workflows 2. **Dashboard development**: - Identify dashboard requirements from Tableau Desktop backlog - Create dashboards with the Dashboard Assistant - Configure sharing modes for different stakeholder groups - Test external sharing workflows 3. **Integration testing**: - Validate data quality matches Tableau Prep outputs - Test refresh schedules - Verify export destinations work correctly **Phase 3: Production deployment** 1. **Cutover planning**: - Schedule production workload migration - Communicate changes to stakeholders - Establish support procedures 2. **Go-live support**: - Monitor initial production runs - Address user questions and workflow optimization - Measure performance against your baseline 3. **Optimization**: - Fine-tune pipelines - Expand user access based on success - Plan Tableau Prep license reduction (if replacing) ### Success criteria **Measure migration success by**: - **Time to create equivalent workflows**: Compare against your Tableau Prep baseline - **Self-service**: Number of users building their own pipelines - **Dashboard turnaround**: Time from request to published dashboard - **User satisfaction**: Survey your team - **Cost**: Total cost of ownership for both approaches ## Next steps after reading this guide ### Immediate actions 1. **Assessment**: Inventory current Tableau Prep flows and dashboard creation bottlenecks 2. **Strategy decision**: Use the decision framework above to choose complement vs replacement 3. **Proof of concept**: Recreate one representative flow in Mammoth with your own data 4. **Cost analysis**: Calculate total cost of ownership for both approaches ### Suggested sequence - Start with the complement strategy, which needs the least change - Focus on the highest-impact dashboard use cases first - Expand access based on early results - Consider the replacement strategy after team adoption Start with your biggest pain point. If dashboard creation is the bottleneck, begin with dashboards. If data preparation complexity frustrates business users, start with the AI Prompt bar. > Tip: Expand in stages\ Prove the approach on one workflow, then expand scope. Do not try to replace everything at once. --- # Migration guides URL: https://mammoth.io/docs/migration/ · Updated: 2026-11-02 Guides for moving data workflows from Excel, Tableau Prep, Power Query, Alteryx or Python and pandas to Mammoth, plus a seven-phase migration checklist. These guides are for analysts, managers, and IT administrators who currently prepare data in another tool and want to move some or all of that work to Mammoth. Each guide compares the tool with Mammoth, shows how common steps translate, and describes how to run both tools side by side while you validate results. ## Where to start Pick the guide for the tool you use today. If you are planning a larger project with several tools or teams, start with the [Migration checklist](https://mammoth.io/docs/migration/migration-checklist/). ### From spreadsheet tools - [Migrating from Excel](https://mammoth.io/docs/migration/from-excel/): Translate Excel functions and pivots into pipeline tasks, decide which workflows should stay in Excel, and validate results in parallel. ### From BI and data preparation platforms - [Migrating from Tableau Prep](https://mammoth.io/docs/migration/from-tableau-prep/): Compare flows with pipelines, and choose between complementing and replacing Tableau Prep. - [Migrating from Power Query](https://mammoth.io/docs/migration/from-power-query/): Use Mammoth for heavy preparation while keeping Power BI, with M code translation examples. - [Migrating from Alteryx](https://mammoth.io/docs/migration/from-alteryx/): Compare features and audiences to choose full migration, a hybrid setup, or an evaluation period. ### From code-based tools - [Python and pandas comparison](https://mammoth.io/docs/migration/from-python-pandas/): Map pandas operations to Mammoth tasks, and combine both with the Python SDK (`mammoth-io`). ### Migration toolkit - [Migration checklist](https://mammoth.io/docs/migration/migration-checklist/): A seven-phase project plan covering assessment, setup, workflow migration, training, adoption, and success measurement. --- # Migration checklist URL: https://mammoth.io/docs/migration/migration-checklist/ · Updated: 2026-11-02 A seven-phase project plan for moving workflows from Excel, Alteryx or Python to Mammoth, with roles, validation steps, training and checklists. This checklist is a project plan for moving data workflows to Mammoth from Alteryx, Excel, Python scripts, or other ETL tools. It is designed for migration leads, managers, and IT administrators. Migrate one workflow at a time and keep the old process running until the new one is validated. The plan has seven phases, followed by challenges and checklists. The week ranges are a suggested sequence, not a guarantee; adjust them to your team's size and workload. For tool-specific comparisons, see the guides for [Excel](https://mammoth.io/docs/migration/from-excel/), [Alteryx](https://mammoth.io/docs/migration/from-alteryx/), [Power Query](https://mammoth.io/docs/migration/from-power-query/), [Tableau Prep](https://mammoth.io/docs/migration/from-tableau-prep/), and [Python and pandas](https://mammoth.io/docs/migration/from-python-pandas/). ## Phase 1: Pre-migration assessment (week 1) ### Current state analysis Before changing any workflow, document what you have today. This baseline is what you measure the migration against. **Inventory your data workflows**: - List all data preparation processes (Excel files, Alteryx workflows, Python scripts) - Document owners and stakeholders for each workflow - Map data sources (databases, files, APIs) and destinations - Record current time spent on data preparation (hours per week per person) - Note pain points: manual steps, error-prone processes, bottlenecks **Common pain points**: - Specialist-tool licensing costs with limited user seats - Excel crashes with large datasets, version control nightmares - Technical complexity preventing business user adoption - IT dependency for simple changes - Manual processes prone to human error - Lack of audit trails for compliance requirements **Documentation template**: ```plaintext Workflow: Monthly Sales Report Owner: Sarah (Sales Operations) Frequency: Monthly Current Tool: Excel + manual PowerPoint Time Required: 8 hours Pain Points: Manual data entry, frequent errors, hard to update Data Sources: Salesforce export, Excel budget file Consumers: Executive team, regional managers ``` ### Team readiness assessment **Identify your champions** Look for team members who are: - Frustrated with current tools - Open to learning new approaches - Influential with peers - Available to participate in pilot **Evaluate technical skills** - **Excel users**: Get a visual interface and automation - **Alteryx users**: Most data preparation steps have a Mammoth equivalent - **Python users**: Can keep scripts for complex analytics, use Mammoth for data prep - **Non-technical users**: A good fit for Mammoth's no-code visual interface **Check executive sponsorship** Confirm leadership commitment to: - Resource allocation (time, training budget) - Change management support - Success metrics accountability - Barrier removal when needed ## Phase 2: Migration planning (week 2) ### Three-phase migration strategy **Stage 1: Foundation (weeks 1-2)** - Platform setup and user onboarding - Team training - Pilot project selection and execution - Early wins to build momentum **Stage 2: Core workflows (weeks 3-6)** - Migrate high-priority, high-visibility workflows - Connect key data sources - Set up Automations for scheduled refresh - Run parallel operations for validation **Stage 3: Full adoption (weeks 7-12)** - Migrate remaining workflows - Advanced feature adoption (AI transformations, dashboards) - Decommission legacy tools - Optimize and refine processes ### Pilot project selection **Ideal pilot characteristics**: - **High visibility**: Executive or stakeholder reporting - **Moderate complexity**: Not too simple (no value demo) or too complex (risk) - **Enthusiastic owner**: Someone excited to try new approach - **Clear success metrics**: Measurable time savings or quality improvement - **Quick turnaround**: Short enough to show results soon **Example pilots**: - Monthly management dashboard (high visibility, clear timeline) - Weekly operational report (frequent use, immediate impact) - Quarterly compliance report (important, well-defined process) - Customer analysis (business-critical, visible outcomes) > Tip: Pick a pilot with real manual effort\ Choose a pilot that takes meaningful manual effort today, so the time savings are measurable and the scope stays manageable for first-time users. ### Resource planning **Required team members**: - **Project Lead**: Overall coordination, stakeholder communication - **Technical Champion**: Platform setup, data connections, power user training - **Workflow owners** (varies): Subject matter expertise, testing, validation - **IT Support** (as needed): Database connections, security approvals - **Executive Sponsor** (oversight): Barrier removal, resource approval **Timeline buffers** Build contingency time into all estimates. Common delays: - Data connection setup (IT approval cycles) - Workflow owner availability for testing - Unexpected validation discrepancies - Training schedule conflicts ## Phase 3: Technical setup (weeks 1-2) ### Workspace configuration **Setup sequence**: 1. **Create the workspace**: Tied to your subscription and billing 2. **Establish projects**: Organize by department, use case, or data domain 3. **Set naming conventions**: Consistent project, dataset, and View naming 4. **Configure permissions**: Workspace roles (Owner, Member) and project roles (Project Admin, Project Editor) 5. **Review the Activity Log**: Mammoth records user actions and pipeline runs automatically; exporting it requires an Enterprise plan **Organizational structure example**: ```plaintext Workspace: Acme Corp ├── Project: Sales Operations │ ├── Dataset: Salesforce Data │ ├── Dataset: Marketing Leads │ └── Dataset: Pipeline Reports ├── Project: Finance │ ├── Dataset: Monthly Financials │ └── Dataset: Budget vs Actual └── Project: Operations ├── Dataset: Production Metrics └── Dataset: Quality Data ``` ### Connection priorities **Connection setup order** (a suggestion; adjust to your sources): 1. **Primary databases**: SQL Server, PostgreSQL, MySQL 2. **Cloud data warehouses**: Snowflake, BigQuery, Redshift 3. **Business applications**: Salesforce, HubSpot 4. **File sources**: SharePoint, SFTP 5. **BI integrations**: Tableau, Power BI (for hybrid workflows) Check the connector list in your workspace and focus on your most frequently accessed sources first. ![MongoDB New Connection form with Host URL, Port, Username, Password, Database and Display Name fields.](https://mammoth.io/docs/images/20260508_140457_LiveConnectionSetupPanelshowingdatabase.webp) ### User management setup **Permission model**: - **Workspace Owner**: Full control of the workspace, including users and billing - **Workspace Member**: Access to the projects they are added to - **Project Admin**: Manages the project and its users - **Project Editor**: Builds datasets, Views, and pipelines within the project **Security integration**: - Single sign-on (SSO) via SAML 2.0 (contact Mammoth to set it up) - API tokens for programmatic access - Role-based access control at project level - Activity Log monitoring for compliance ## Phase 4: Workflow migration (weeks 3-8) ### Assessment and prioritization matrix **Evaluate each workflow**: | Criteria | Weight | Score (1-5) | Weighted score | | --- | --- | --- | --- | | Business criticality | 30% | X | X * 0.3 | | Usage frequency | 25% | X | X * 0.25 | | Technical complexity | 20% | X | X * 0.2 | | Owner availability | 15% | X | X * 0.15 | | Stakeholder visibility | 10% | X | X * 0.1 | **Migration order**: Highest weighted scores first. ### Tool-specific translation strategies **From Excel to Mammoth**: - **Manual copy/paste** → Connectors with scheduled refresh - **VLOOKUP formulas** → Join/Lookup transformations - **Pivot tables** → Group & Pivot transformations - **IF statements** → Conditional Filter, Label & Insert Values, or AI SQL Query (`CASE WHEN`) - **VBA macros** → Sequential transformation pipelines - **Formatting rules** → Display Changes and number formatting **From Alteryx to Mammoth**: - **Visual workflows** → Visual pipelines - **Input tools** → Connectors or file upload - **Filter tools** → Conditional Filter transformations - **Join tools** → Join transformations with preview - **Formula tools** → Math function, AI SQL Query, and Add Column - **Output tools** → Export destinations and Live Links **From Python and pandas to Mammoth**: - **Data loading** → Connectors (no more file path management) - **Basic transformations** → Visual pipeline functions - **Complex analytics** → Keep in Python OR use the AI SQL Query function - **Scheduling** → Mammoth Automations - **Output generation** → Export destinations > Tip: You do not have to migrate everything\ You can use Mammoth for data preparation and keep Python or R for advanced analytics. ### Parallel operation protocol **Validation process**: 1. **Build Mammoth pipeline** replicating existing logic 2. **Run both workflows** on same source data 3. **Compare outputs**: - Row counts must match exactly - Key totals match, or differ only within a tolerance you agreed on - Sample detailed records for accuracy 4. **Document discrepancies** and resolve systematically 5. **User sign-off** before switching to production **Common validation issues**: - **Rounding differences**: Usually acceptable (document tolerance) - **Date formatting**: Mammoth standardizes, may look different but be equivalent - **Null handling**: Different tools handle blanks differently - **Sort order**: May differ but not impact analysis ### Pipeline documentation standards **Required documentation** for each migrated workflow: ```plaintext Pipeline: Monthly Sales Dashboard Business Purpose: Executive visibility into sales performance Owner: Sarah Johnson (Sales Operations) Data Sources: - Salesforce (connector, daily refresh) - Excel budget file (manual upload monthly) Transformation Logic: 1. Filter for current fiscal year 2. Join sales data with budget targets 3. Calculate variance and percentage attainment 4. Group by region and product line Output Destinations: - PowerBI dashboard (auto-refresh) - Excel export for presentations Schedule: Daily at 6 AM (Automation) Known Limitations: Budget data requires manual update Last Updated: [Date] by [Person] ``` ## Phase 5: Team enablement (weeks 2-6) ### Training program structure Run structured training in four sessions. **Session 1: Platform basics** - Interface navigation: Workspace → Project → Dataset → View - Creating Views from files and connectors - Explore Cards for data profiling and quality assessment - Basic transformations: Filter, Find & replace, Math function - Draft mode **Session 2: Building pipelines** - Transformation sequencing and dependencies - Common patterns: clean → filter → join → aggregate - Using AI-powered functions (Bulk Replace, AI SQL Query) - Pipeline validation and testing - Activity Log for auditing and troubleshooting **Session 3: Automation and sharing** - Automations for scheduled workflows - Export destinations (databases, SFTP, Tableau, and others) - Live Links for sharing a View as a CSV URL - Dashboard creation (if applicable) - Collaboration and sharing features **Session 4: Role-specific training** - **Administrators**: User management, permissions, security - **Power users**: Advanced transformations, API integration, optimization - **Business users**: Specific workflow deep dives, troubleshooting ### Champion development strategy **Identify 2-3 power users per team**: - Provide advanced training and early access - Establish regular office hours for peer support - Create internal documentation and best practices - Recognize achievements and share success stories - Enable them to train others (peer-to-peer learning) **Support structure**: - **Start**: Frequent check-ins and hands-on support - **Next**: Less frequent support, troubleshooting - **Later**: Weekly reviews, advanced feature adoption - **Ongoing**: Monthly optimization sessions, new use cases ## Phase 6: Adoption and change management (weeks 1-12) ### Example communication messages by stakeholder **Executive messaging**: - **Return on investment**: "Time savings and cost avoidance through automation" - **Risk reduction**: "Eliminate manual errors, improve data quality, ensure audit compliance" - **Speed of insight**: "Faster refresh means decisions use current data" **Manager messaging**: - **Team efficiency**: "Less time on data preparation frees analysts for strategic work" - **Quality improvement**: "Automated workflows reduce manual errors and improve consistency" - **Visibility**: "Dashboards and automated reports on fresh data improve decision-making speed" **User messaging**: - **Easier workflows**: "No code to learn, no more Excel crashes or manual copy-paste" - **Professional growth**: "Focus on analysis and insights instead of data manipulation" - **Recognition**: "Share your results with the team" ### Adoption tracking metrics **Leading indicators** (weekly tracking): - Active users (sign-in frequency) - Pipeline creation rate - Automation setup - Training completion percentage - Champion engagement level **Lagging indicators** (monthly tracking): - Workflow migration completion rate - Legacy tool usage decline - User satisfaction surveys (quarterly) - Support ticket volume (should decrease) - ROI realization against targets ### Resistance management **Common objections and responses**: **"Our current tool works fine"** - Response: Demonstrate specific time savings on their actual workflows - Show: A visual interface that needs no code - Prove: Rebuild one of their own workflows as a pilot **"Too risky to change"** - Response: Parallel operation lets you validate before switching - Prove: A phased approach allows gradual transition with fallback options **"Don't have time to learn something new"** - Response: The interface is visual and needs no code - Show: Training time compared with the manual time saved - Prove: Build a first automated workflow together > Tip: Start with enthusiastic adopters\ Focus first on users who are keen to try the new tool, and use their results to show skeptics what is possible. ## Phase 7: Success measurement (ongoing) ### ROI tracking framework **Quantifiable benefits** **Time savings**: - Baseline: Hours per week spent on data preparation (pre-migration) - Target: Set your own goal from your measured baseline - Calculation: (Baseline Hours - New Hours) × Hourly Rate × 52 weeks - Example with made-up numbers: (20 hours - 5 hours) × 50 dollars per hour × 52 weeks = 39,000 dollars per person per year **Cost avoidance**: - Legacy tool licensing not renewed - Reduced IT support burden - Elimination of manual error costs - Shorter time from question to answer **Quality improvements**: - Fewer manual data errors - Audit compliance automation - Consistent, repeatable processes - Pipeline version history and the Activity Log ### Suggested milestones Use these as a planning aid and replace the timing with your own targets: - **Early**: First automated workflow operational - **Next**: Core workflows migrated and validated - **Then**: Team self-sufficiency - **Later**: Full adoption and legacy tool decommissioning - **Ongoing**: Advanced feature adoption, optimization, and ROI review ### Continuous improvement process **Monthly reviews**: - Pipeline performance analysis - New use case identification - User feedback incorporation - Feature adoption tracking - Optimization opportunities **Quarterly business reviews**: - ROI measurement and validation - Success story documentation - Additional workflow migration opportunities - Advanced feature training needs - Strategic alignment assessment ## Common migration challenges and solutions ### Challenge: Complex legacy workflows **Symptoms**: 50+ step Alteryx workflows, intricate Excel models with VBA, custom Python analytics **Solutions**: - **Break into components**: Migrate data preparation separately from complex analytics - **Use hybrid approach**: Mammoth for prep, existing tools for specialized analysis - **Use the AI SQL Query function**: Handle complex calculations that don't fit standard transformations - **Document assumptions**: Clearly note any logic simplifications made during migration - **Phase the complexity**: Start with core logic, add edge cases in later phases ### Challenge: Data source access issues **Symptoms**: Firewall restrictions, credential access delays, VPN requirements **Prevention**: - **Engage IT early**: Include database administrators in planning from Week 1 - **Test connections first**: Validate access before migration day - **Document requirements**: Network ports, IP ranges, authentication methods - **Have fallbacks**: File upload options if connector setup is delayed - **Plan for approvals**: Security reviews can add time in large organizations ### Challenge: User resistance to change **Symptoms**: Low training attendance, continued use of old tools, "temporary" usage claims **Solutions**: - **Involve resisters in pilot selection**: Give them voice in choosing workflows to migrate - **Celebrate wins visibly**: Share time savings and quality improvements broadly - **Provide hands-on training**: Avoid presentation-only sessions, require actual pipeline building - **Establish peer support**: Champions help colleagues more effectively than management mandates - **Address concerns directly**: Don't dismiss worries, investigate and resolve systematically > Tip: Let skeptics build the first pipeline\ Have skeptics build their first automated pipeline themselves, so they see their own manual process run automatically. ### Challenge: Validation discrepancies **Symptoms**: Different row counts, totals that don't match, unexpected data variations **Systematic resolution**: 1. **Start with row counts**: Ensure same number of records processed 2. **Check key totals**: Revenue, quantities, major aggregations 3. **Sample detailed records**: Compare individual rows for logic differences 4. **Investigate systematically**: Document every discrepancy, no matter how small 5. **Define acceptable variance**: Agree it with the workflow owner; financial data usually needs a tighter tolerance than text processing 6. **Get user sign-off**: Workflow owner must approve all differences before go-live ### Challenge: Schedule slippage **Common delays**: - Data connection setup taking longer than expected - Workflow owner availability conflicts (vacation, competing priorities) - Validation revealing unexpected complexity requiring rework - Training logistics (conference room booking, schedule coordination) **Mitigation strategies**: - **Build a time buffer** into all estimates - **Prioritize ruthlessly**: Core workflows first, nice-to-haves later - **Communicate early**: Alert stakeholders to delays immediately, don't wait - **Adjust scope**: Move complex workflows to later phases if needed - **Celebrate milestones**: Maintain momentum even when behind schedule ## Migration checklists ### Pre-migration assessment checklist - [ ] Current workflow inventory completed (tool, owner, frequency, pain points) - [ ] Baseline time measurements documented (hours per person per week) - [ ] Team readiness assessment completed (champions identified, skills evaluated) - [ ] Executive sponsorship confirmed (resources, timeline, success criteria) - [ ] Pilot project selected (high visibility, moderate complexity, enthusiastic owner) - [ ] Success criteria defined (time savings targets, quality improvements, ROI goals) - [ ] Communication plan created (stakeholder messaging, update frequency) ### Technical setup checklist - [ ] Workspace created and configured (naming conventions, permissions model) - [ ] Projects established (organizational structure, user assignments) - [ ] Data connection requirements documented (systems, credentials, security approvals) - [ ] IT engagement initiated (database access, firewall rules, VPN requirements) - [ ] User accounts provisioned (SSO configuration, role assignments) - [ ] Activity Log reviewed (audit trail, compliance requirements) - [ ] API tokens generated (programmatic access, integration requirements) ### Training completion checklist - [ ] Session 1: Platform basics completed by all users - [ ] Session 2: Building pipelines completed by workflow owners - [ ] Session 3: Automation and sharing completed by power users - [ ] Session 4: Role-specific training completed by administrators - [ ] Champions identified and provided advanced training - [ ] Internal documentation created (best practices, common patterns) - [ ] Support structure established (office hours, escalation paths) ### Workflow migration checklist **For each workflow**: - [ ] Business purpose and success criteria documented - [ ] Current state workflow mapped (inputs, transformations, outputs) - [ ] Mammoth pipeline developed and tested - [ ] Parallel operation initiated (old and new workflows running) - [ ] Output validation completed (row counts, totals, sample records) - [ ] Discrepancies investigated and resolved - [ ] User sign-off obtained (acceptable variance documented) - [ ] Documentation updated (pipeline logic, known limitations) - [ ] Production cutover scheduled and executed - [ ] Legacy workflow decommissioned ### Go-live readiness checklist - [ ] All critical workflows migrated and validated - [ ] Team training completed and competency verified - [ ] Support structure operational (champions, escalation paths) - [ ] Monitoring dashboard configured (adoption metrics, usage tracking) - [ ] Legacy tool decommissioning plan finalized - [ ] Success celebration planned (recognize achievements, build momentum) - [ ] Continuous improvement process established (monthly reviews, optimization) - [ ] ROI tracking initiated (baseline vs actual measurements) ## Next steps after reading this checklist ### Immediate actions (this week) 1. **Complete the pre-migration assessment**: Use the documentation template above to document current state 2. **Identify a pilot project**: Select high-visibility workflow with enthusiastic owner 3. **Engage key stakeholders**: Confirm executive sponsorship and IT support 4. **Schedule initial training**: Book platform basics session for core team 5. **Begin connection planning**: Identify primary data sources and access requirements ### Implementation support For migration planning help, contact your Mammoth account manager or support. ### Success metrics to track Track your migration progress with key metrics: - **Workflow migration**: X of Y workflows completed - **User adoption**: X% of users actively creating pipelines - **Time savings**: X hours per week freed up - **Cost avoidance**: $X in licensing and IT support savings - **Quality improvement**: X% reduction in data errors - **ROI realization**: X% return on investment A migration needs planning, phased execution, user adoption, and continuous measurement. Each element depends on the others. ---