Give your team Looker numbers without buying more seats

A read-only metrics portal where your team browses an approved set of reports, sets filters, and sees live numbers without a paid BI seat.

App
LookerSlack BotGoogle SheetsOperationsAI ReportsData Sync
PromptCreate

Build me a self-serve metrics portal on top of Looker for the people on my team who do not have a paid Looker seat. Today an ops manager, a CS lead, or a sales rep needs three numbers a week and cannot justify a licence, so they ping an analyst every time. This app should let an admin curate a catalog of approved Looks and dashboards, and let everyone else browse that catalog, set filters, and read live results themselves. The audience is non-technical, so the interface should feel like picking a report off a shelf, not like building a query.

Admin catalog page. Only admins see this. It searches Looker with Search Looks and Search Dashboards so an admin can find content by title or folder, and add individual Looks and dashboards to the curated catalog. Each catalog entry stores the Looker id, a friendly display name and description the admin can override, and a section label such as Sales, Support, or Finance for grouping. For a dashboard entry, call Get Dashboard to pull its title and tiles, and Get All Dashboard Filters to read the filters it exposes, so the admin can choose which of those filters viewers are allowed to change and set default values for the rest. Admins can reorder, rename, and remove entries. The curated catalog lives in the app's own storage, not in Looker.

Viewer home. Everyone else lands here. It shows the curated catalog grouped by section, with search across the friendly names and descriptions. Above the catalog, show the signed-in viewer's pinned favorites and their recently run list, each entry deep-linking back into the report with the filters they last used. Favorites and recents are stored per viewer, so what one person pins never shows up for anyone else.

Report view. When a viewer opens a catalog entry, render the filters the admin exposed for it as friendly controls, using date pickers for date filters and dropdowns where the filter has a fixed set of values, prefilled with the admin's defaults. When the viewer hits Run, a server handler executes the query and renders the result twice: as a sortable table and as a chart chosen to fit the shape of the data, such as a line for a time series and a bar for a category breakdown. For a Look, use Run Look with the json result format. For a dashboard tile or a filtered query, use Run Inline Query with the json result format, or Run Query when running a saved query id. Because some of these reports are heavy, run anything that may be slow through Run Query Async and poll Get Async Query Results until it completes, keeping a loading state on screen rather than timing out. Show the row count and the time the query ran so nobody wonders whether they are looking at stale numbers.

Sharing actions. From any result the viewer gets two buttons. Post to Slack formats a snapshot of the result, the report name, the filters that were applied, and the headline figures, and sends it to a channel the viewer picks with the Slack Bot Send a Message operation, using List Channels to populate the channel picker. Send to spreadsheet pushes the underlying rows into a reporting spreadsheet with the Google Sheets Append Values operation, stamping each row with the report name, the filter values, and the run timestamp so appended history stays readable. Let an admin restrict which channels and which spreadsheet are available.

Explain these numbers. Put a button next to the chart that kicks off a background agent. The agent re-runs the current query for the selected period, runs it again for the immediately preceding period of the same length, compares the two, and writes a short plain English read of what moved, by how much, and what most likely drove it, calling out the largest contributing segments or rows rather than just restating totals. It should write its output back into the app so the explanation renders in a panel right beside the chart, with a timestamp and the two periods it compared. Show a clear in-progress state while the agent works, and keep the last explanation visible so a viewer can reopen the report later and still see it.

The most important rule: the portal must never expose Looks or dashboards outside the curated catalog. Every server handler that runs a query has to check the requested id against the approved catalog first and refuse anything else, rather than trusting an id sent from the browser. Everything the portal does is read-only against Looker, with no ability to create, edit, or delete Looker content. The whole point is controlled read-only access for unlicensed staff, so lean toward being restrictive: if an admin has not approved it, it does not exist as far as this app is concerned.

What does this prompt do?

  • Gives everyone on your team a simple portal to pull the numbers they need, so they stop pinging an analyst for the same three figures every week
  • An admin picks exactly which reports and dashboards are shared, and the portal shows nothing outside that approved list
  • Viewers choose a report, set the filters it allows, and see live results as both a table and a chart
  • Any result can be posted straight into a Slack channel or added to a shared reporting spreadsheet
  • An Explain these numbers button writes a plain English read of what moved since the previous period and why it likely happened

What do I need to use this?

  • A Looker account with permission to create an API key, ideally on a dedicated service user
  • The reports and dashboards you want to share already saved in Looker
  • A Slack workspace, if you want people to post snapshots into channels
  • A Google account and a spreadsheet, if you want people to export rows for further analysis

How can I customize it?

  • Change which reports and dashboards appear in the catalog at any time, and group them into sections like Sales, Support, or Finance
  • Decide which filters each report exposes, and set sensible defaults such as the last 30 days
  • Pick the Slack channels people can post to, and the spreadsheet exports land in
  • Adjust what the explanation compares against, for example the prior week, the prior month, or the same period last year

FAQs

Do the people using this portal need their own Looker license?
No. That is the whole point. The portal connects to Looker once using a single account, and everyone else reads the results through the portal. Your team gets the numbers without paying for a viewer seat each.
Can someone use this to see reports they are not supposed to see?
No. The portal only ever shows the reports an admin has added to the catalog, and it refuses to run anything outside that list even if someone knows the name of another report. It is read-only, so nobody can change or delete anything in Looker.
Are the numbers live, or a stale copy?
They are live. Every time someone opens a report and applies filters, the portal runs the query against Looker right then and shows the current result. Nothing is cached behind your back.
What happens with slow reports that take a while to run?
Bigger queries are handled in the background and the portal keeps waiting for the result instead of timing out, so heavy reports still work.
Is the plain English explanation reliable enough to act on?
Treat it as a helpful first read rather than a final answer. It compares the current period against the previous one and describes what moved and what most likely drove it. The underlying table and chart are always right there so anyone can check the numbers themselves.
Can each person save the reports they use most?
Yes. Everyone gets their own pinned favorites and their own recently run list, so the reports one person checks every Monday do not clutter anyone else's view.

Related templates

Call overdue Xero customers with an AI collections agent

Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.

LiveKit
Xero
Deepgram
+2
Agentic Task
Local listing health board for every location you manage

See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.

Local Business Data
Google Sheets
App
Let support send one-off Loops emails without an engineer

Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.

Loops.so
Stripe
Google Sheets
App
A brand asset library your marketing team actually searches

Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.

General Input Storage
General Input Database
JigsawStack
+1
App
Turn Mailjet email clicks into ranked HubSpot follow-ups

Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.

Mailjet
HubSpot
Slack Bot
Agentic Task
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.

Looker
Slack Bot
App

Stop being the human API for your company's numbers.

Give your whole team self-serve access to the reports that matter, without buying anyone a BI seat.