# Clean out the Looker dashboards and Looks nobody opens

> One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.

- Workflow type: app
- Services: Looker, Slack Bot
- Categories: Operations
- Published: 2026-08-31

## What it does

- Lists every dashboard and saved Look in your Looker instance on one board, with the folder it lives in, who owns it, and how many people have favorited it.
- Filters down to the likely dead content in seconds: anything with no favorites, everything in a folder you suspect is stale, or everything owned by someone who has left.
- Opens any item to show what it is actually built from before you touch it, then lets you archive it, rename it, or remove it behind a confirmation step.
- A review button hands an item to a background assistant that compares it against similarly named content and writes back a keep, merge or retire call with its reasoning, plus a message you can send the owner on Slack.

## What you'll need

- A Looker account, plus a Looker admin to create an API key for the app once during setup
- An existing folder in Looker you want to use as the archive for retired content
- A Slack workspace, if you want to message content owners without leaving the app

## Prompt

Build me an app for cleaning up our Looker instance. Dashboards and saved Looks pile up for years and nobody ever retires them, so I want one screen where I can see everything, spot the dead content, and act on it safely.

The main screen is a content inventory board listing every dashboard and every saved Look in the instance. Build the list from Looker Search Dashboards and Search Looks, resolve the containing folder for each item with Get All Folders, resolve the owner name and email with Get All Users, and work out how many people have favorited each item with Search Favorite Contents. Each row shows the title, whether it is a dashboard or a Look, its folder, its owner, its favorite count, and when it was last updated. Give me filters for folder, for owner, and for content type, plus a no favorites toggle that narrows the board to items nobody has favorited, which is my best available signal for likely dead content. Let me sort by favorite count and by last updated so the most neglected content floats to the top.

Clicking a row opens a detail panel. For a dashboard, load it with Get Dashboard and list its tiles with Get All DashboardElements, showing each tile title and the query or Look behind it so I can see what the dashboard is actually made of before I touch it. For a Look, load it with Get Look and show its underlying query and folder. In both cases show the owner, the folder path, the favorite count, and which users have favorited it.

From the detail panel I can act on the item. For a dashboard: rename it with Update Dashboard, move it into an archive folder with Move Dashboard, or remove it with Delete Dashboard. For a Look: rename it with Update Look, move it into an archive folder with Move Look, or remove it with Delete Look. Treat dashboards and Looks symmetrically here, since the same actions are available for both. Let me choose which existing folder is my archive folder, populating the picker with Get All Folders, and remember that choice across sessions. I can also clear stale favorites on an item with Delete Favorite Content, either one favorite at a time or all of them at once.

Never delete a dashboard or a Look without an explicit confirm step in the UI. The confirm dialog has to name the specific item being deleted and require a deliberate action to proceed, not a single stray click that could be misfired while scanning the board. Lead with archiving rather than deleting everywhere in the interface: make moving something into the archive folder the prominent action and deletion the quieter secondary one, because moving content between folders can be undone and deleting cannot.

Add a Review this item button on each row and in the detail panel that kicks off a background agent. For a dashboard the agent reads it with Get Dashboard and walks its tiles with Get All DashboardElements to understand what it reports on. For a Look it reads the item with Get Look. It then searches for similarly named or overlapping content with Search Dashboards and Search Looks, checks the favorite counts of whatever it finds with Search Favorite Contents, and writes back a recommendation of keep, merge or retire along with a short justification that names the specific evidence, for example that three near identical revenue dashboards exist across different folders, or that this one has no favorites and has not been touched in two years. When the recommendation is merge, it names the item it thinks this should merge into.

The same agent also drafts a short message to the content owner explaining what it found and what it recommends, written to read like a note to a colleague rather than an audit report. The recommendation, the justification and the drafted message all land back in the app against that item, so the board can show review status and recommendation as columns I can filter and sort by. Nothing the agent produces is ever applied automatically. It writes a recommendation and I decide what happens.

From the detail panel, let me send the drafted owner message to Slack with Slack Bot Send a Message, editing it first if I want. Resolve the owner Slack account from their Looker email using Slack Bot Look Up User by Email and direct message them, and when no matching Slack user is found, let me pick a channel to post into instead. Record on the item that the owner was notified and when, so I can come back later, see who has already been pinged, and chase the ones who never came back to me.

Persist the following in the app's own storage, keyed by the Looker content id: the agent recommendation and justification, the drafted owner message, review status, whether the owner has been notified and when, and a manual flag for review marker I can set myself on anything the agent has not looked at yet. This state belongs to the app rather than to Looker, so it survives across sessions and is shared by everyone working out of the board. The intended rhythm is filter to suspicious content, review it, tell the owner, then archive, with deletion reserved for things that have already been through that path.

## How to customize

- Change what counts as likely dead. No favorites is the default signal, but you can filter by folder, owner, content type, or how long it has been since anything changed.
- Point the archive at whichever folder your team already uses for retired content, and swap it later without rebuilding anything.
- Adjust how blunt the drafted owner message is before it goes to Slack, and choose whether it lands as a direct message or in a shared channel.

## FAQ

### Will this delete anything on its own?

No. Nothing is removed without you confirming it in the app first, and the confirmation names the exact item you are about to delete. The app deliberately makes archiving the prominent action and deleting the quieter one, because moving something to an archive folder can be undone and deleting cannot.

### Does it work on saved Looks as well as dashboards?

Yes. Both show up in the same inventory, and both can be renamed, moved to your archive folder, or removed. You can also review either one and message its owner.

### How does it decide what to retire?

The review assistant reads what the item is actually built from, checks how many people have favorited it, and looks for near duplicates with similar names elsewhere in the instance. It then recommends keep, merge or retire and explains the specific evidence behind that call. You always make the final decision.

### Do I need to be a Looker admin to use it?

An admin needs to create the API key once during setup. After that the app runs against that connection, so anyone you share it with can browse the inventory and work through the cleanup.

### What if I archive something people still need?

Archiving just moves the content into a folder you picked, so it is still there and can be moved straight back. That is why the app pushes you toward archiving first and treats deletion as the last step, usually after the owner has been told.

### Can I tell the owner before anything disappears?

Yes, and that is the intended flow. The assistant drafts a short message explaining what it found and what it suggests, you edit it if you want, and it goes to that person on Slack. The app then records who has been notified and when, so you can chase the ones who never replied.

Use this prompt in General Input: https://www.generalinput.com/prompts/clean-out-the-looker-dashboards-and-looks-nobody-opens