What this pack contains
Fifteen tests that read an Atlan tenant and tell you whether it is working and well governed. They run on a data source built from the Atlan Data Source Template. Eleven are standard tests. Four are template tests that create one child test for every Atlan connection or data domain in the data source's catalog, so a new connection in Atlan gets its own freshness, owner and description checks after the next metadata ingestion.
Every test works the same way. It counts the issues it finds, returns that count, and passes at zero. A failing test prints the list of issues in its result and, where the runtime supports it, attaches the list as a CSV file, so you see the stale connection, the table with no owner or the dashboard still reading a deprecated table rather than only a number. Thresholds sit in a PARAMETERS block at the top of each script.
| Test | Type | Dimension | Severity | Fails when |
|---|---|---|---|---|
| API reachable and credentials valid | Standard | Performance | Critical | Atlan does not answer the integration's credentials within the time limit. Refused credentials make the test error. Every other check depends on this one |
| API tokens not expiring soon | Standard | Security | High | An Atlan API token has expired or expires within 14 days, the most common reason an integration stops overnight |
| Metadata extraction current: connection | Template, per connection | Timeliness | High | The connection was last crawled more than 7 days ago, or never, so Atlan may describe tables that no longer look that way |
| No failed crawler runs | Standard | Processing | High | A crawler or app run failed, errored or was terminated in the last 7 days |
| Table owner coverage: connection | Template, per connection | Completeness | Medium | Fewer than 50% of the connection's tables and views have an owner; lists those without one |
| Owners are active users | Standard | Relationships | High | A user named as an asset owner is disabled or is not an Atlan user, so questions and requests go nowhere |
| Table description coverage: connection | Template, per connection | Completeness | Low | Fewer than 80% of the connection's tables and views have a description; lists those without one |
| Deprecated assets have no downstream consumers | Standard | Relationships | High | An asset or dashboard one lineage step downstream still reads from a table or view certified Deprecated |
| No long-lived draft certificates | Standard | Timeliness | Low | A table or view has been certified Draft for more than 90 days: a review someone started and nobody finished |
| No duplicate glossary terms | Standard | Uniqueness | Medium | Two terms in a glossary share a name once case, spacing and punctuation are ignored, such as "Order" and "order " |
| Glossary terms have definitions | Standard | Completeness | Medium | A glossary term has no description, which leaves it only a label |
| No near-duplicate tags | Standard | Consistency | Low | Atlan tags differ only in case or punctuation, such as PII and pii, which splits search results and any policy keyed on the tag |
| Data domain has assets: domain | Template, per data domain | Completeness | Low | A data domain holds no assets |
| No expired announcements left on assets | Standard | Timeliness | Low | A table or view still shows an announcement past its expiry date |
| Validatar feed into Atlan is current | Standard | Timeliness | High | No asset carries the Validatar custom metadata set, or its values were last published more than 48 hours ago |
Every test name in Validatar starts with Atlan -, for example Atlan - No failed crawler runs. Child tests add the object's table name, such as Atlan - Metadata extraction current: Snowflake PROD [1700000001], and are placed in a folder named after their template test.
The standard tests are linked to the Ingestion Summary table of the Atlan object type they judge, and the child tests to the connection or domain table they check. The Validatar catalog for the Atlan data source therefore shows coverage and trust by object type and by object.
The last test watches the integration itself. If the publish step stops, Atlan keeps showing old scores, and this test is how you find out.
A check the integration's Atlan credentials may not run shows as Error, with a message naming what could not be read, rather than passing. A check with nothing to judge, such as owner coverage on a BI connection with no tables, passes with a note.
Where to get it
Marketplace: Atlan Instance Health Checks
Prerequisites
- An Atlan data source created from the Atlan Data Source Template, with Ingest Technical Metadata run at least once. The template tests select their objects from its Connection and Data Domain schemas.
- Atlan credentials whose personas cover the connections you want checked. API tokens not expiring soon and Owners are active users list API tokens and users, which needs an Atlan admin.
- pyatlan 11.4 in the Python that runs Validatar scripts, as described in the Atlan Data Source Template article.
- To try the pack without Atlan, turn on Demo Mode on the data source. The built-in sample tenant makes 12 of the 27 results fail on purpose, so you can see what a failing result looks like. Demo mode needs no pyatlan install.
Import
- Ingest the Atlan data source's metadata first. The template tests need its catalog, and the standard tests link to its Ingestion Summary tables.
- Create a folder for the pack in the target project, for example Atlan Instance Health Checks. The tests are imported straight into the folder you choose.
- Open Marketplace in Validatar, find Atlan Instance Health Checks, choose Get, then Import Directly.
- Choose the target project when prompted. The pack is project content, so Validatar asks which project to put it in.
- Map the pack's data source Atlan to your Atlan data source, and choose the folder from step 2.
- Choose Review Changes. The review lists the 15 tests to add. Choose Import.
- Open each of the four template tests and generate their child tests, so they pick up the connections and data domains in your catalog. See Materializing Child Tests.
- Run the folder, or add it to a job. Daily is a sensible schedule.
To import from a file instead, download the pack from the marketplace listing and import it on the project's Import page.

Adjusting a test
Each script starts with its thresholds. For example, the extraction check:
# Atlan Instance Health Check: Metadata extraction current
# Runs once per Atlan connection (child of a template test).
# PARAMETERS --------------------------------------------------------
MAX_AGE_DAYS = 7 # oldest acceptable crawl
# -------------------------------------------------------------------
dataframe = health_frame(
atlan_check_extraction(atlan_client(), r"""{{table.name}}""", max_age_days=MAX_AGE_DAYS),
"metadata_extraction")
Change a value and save. For a template test, change it on the template test and generate the child tests again. The checking logic lives in the Atlan template, so a newer template version improves every test without re-importing the pack.
| Test | Parameters (default) |
|---|---|
| API reachable and credentials valid | MAX_SECONDS = 10: slowest acceptable answer |
| API tokens not expiring soon | MIN_DAYS_LEFT = 14; TOKEN_NAMES = "", a comma-separated list of the tokens to watch, blank for every token |
| Metadata extraction current | MAX_AGE_DAYS = 7 |
| No failed crawler runs | DAYS = 7: how far back to look |
| Table owner coverage | MIN_OWNED_PCT = 50 |
| Table description coverage | MIN_DESCRIBED_PCT = 80 |
| No long-lived draft certificates | MAX_DRAFT_DAYS = 90 |
| No duplicate glossary terms | ACROSS_GLOSSARIES = False: set to True to compare terms in different glossaries too |
| Data domain has assets | MIN_ASSETS = 1 |
| Validatar feed into Atlan is current | SET_NAME = "Validatar", which must match the template's Custom Metadata Set Name; MAX_AGE_HOURS = 48; REQUIRE_VALUES = True |
| Owners are active users, Deprecated assets have no downstream consumers, Glossary terms have definitions, No near-duplicate tags, No expired announcements left on assets | none |
When the template's Publish Target is External DQ (preview) only, nothing is written to the Validatar custom metadata set, so set REQUIRE_VALUES to False on the feed test.
What the demo tenant shows
With Demo Mode on, the sample tenant is a fictional company with four connections and these deliberate problems:
| Test | Result | Why |
|---|---|---|
| Metadata extraction current | Fails for PostgreSQL CRM | The CRM connection was last crawled 19 days ago |
| No failed crawler runs | Fails | The CRM crawler's latest run failed |
| Table owner coverage | Fails for PostgreSQL CRM | One CRM table in three has an owner |
| Owners are active users | Fails | The owner of the CRM opportunities table is a disabled user |
| Table description coverage | Fails for PostgreSQL CRM | One CRM table in three has a description |
| Deprecated assets have no downstream consumers | Fails | STAGE.RAW_ORDERS, certified Deprecated, still feeds PUBLIC.ORDERS and a Tableau dashboard |
| No long-lived draft certificates | Fails | PUBLIC.ORDER_ITEMS has been Draft for 200 days |
| No duplicate glossary terms | Fails | "Order" and "order " |
| Glossary terms have definitions | Fails | "order " has no definition |
| No near-duplicate tags | Fails | "PII" and "pii", "Customer Data" and "customer-data" |
| Data domain has assets | Fails for Marketing | The domain is empty |
| No expired announcements left on assets | Fails | An announcement on PUBLIC.CUSTOMERS expired 10 days ago |
Everything else passes, including Validatar feed into Atlan is current, because two sample tables carry Validatar values published less than a day earlier. With the template tests' child tests (one per connection or domain) a demo run gives 27 results: 15 pass and 12 fail by design. The sample's Snowflake SAMPLE_DW connection passes every check; it is the one the Atlan Metadata and Lineage Scripts use in their own demo.

Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| A template test has no child tests | The Atlan data source's metadata has not been ingested, or the child tests were not generated | Run Ingest Technical Metadata, then generate the child tests |
| A test shows Error saying the credentials may not read something | The Atlan identity lacks a persona or role | Add it, or remove the test. API tokens and users need an admin |
| A test shows Error with "pyatlan is not installed" | Demo Mode is off and the runtime lacks pyatlan | Install pyatlan==11.4.*, or turn Demo Mode on |
| A child test errors with "No Atlan connection matches" | The connection was removed from Atlan, or the credentials no longer see it | Ingest the Atlan data source's metadata again and regenerate the child tests |
| No failed crawler runs passes but prints that no runs were found | The test reads Atlan app runs, and none completed in the window | Check crawler runs in Atlan directly. A tenant that still runs legacy workflows may not list its runs here |
| Validatar feed test fails with "no asset carries Validatar values" | Publishing to Atlan is not set up, is in Dry Run, or uses another set name | Set up publishing, or set SET_NAME to match. With External DQ only, set REQUIRE_VALUES to False |
Related
- Atlan Data Source Template
- Atlan Integration
- Atlan Custom Metadata for Validatar
- Atlan Metadata and Lineage Scripts
- Materializing Child Tests
- Quality Dimensions
Note: These tests are built from Atlan's documentation and its official Python SDK, and have been run in Validatar against the built-in sample Atlan tenant. They have not yet been run against a live Atlan tenant, so thresholds and some checks may change after that validation.