Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Google Looker

Scalekit connector
Open markdown

The Google Looker connector lets your AI agent act in each user's Google Looker account. Each user signs in to Google Looker once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 31 tools.

Tools
31
What they doRead · write · destructive
18 · 9 · 418 read9 write4 destructive
Users sign in with
OAuth app
Your own Google Looker app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Google Looker connection

    In AgentKit > Connections, create a Google Looker connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Google Looker connections use your own OAuth app. Register one with Google Looker and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Google Looker connection.

    Console steps with screenshots

    Register your Scalekit environment with the Google Looker connector so Scalekit handles the OAuth flow and token lifecycle for you. The connection name you create will be used to identify and invoke the connection programmatically.

    1. Create a Google Looker instance

      Google Looker (Google Cloud core) runs as a managed service in your Google Cloud project. You must create an instance before setting up OAuth credentials.

      • Go to Google Cloud Console and select or create a project.

      • In the navigation menu, go to Looker (or search for “Looker” in the search bar).

      • Click Create Instance and follow the setup wizard. Note your instance hostname — it will look like your-company.cloud.looker.com. You will need this when adding connected accounts in Scalekit.

        Google Cloud Looker instance creation page showing setup steps

    2. Enable the Looker API

      • In Google Cloud Console, go to APIs & Services > Library. Search for “Looker (Google Cloud core) API” and click Enable.

        Looker (Google Cloud core) API product page showing the Enable button and API Enabled status

    3. Create OAuth credentials in Google Cloud Console

      Google Looker uses Google OAuth 2.0. You need OAuth client credentials from the same Google Cloud project that hosts your Looker instance.

      • In Google Cloud Console, go to APIs & Services > Credentials.

        Google Cloud Console Credentials page listing API keys, OAuth 2.0 client IDs, and service accounts

      • Click Create Credentials > OAuth client ID.

        Create credentials menu showing API key, OAuth client ID, and Service account options

      • Select Web application as the application type.

        Application type dropdown with Web application, Android, Chrome Extension, iOS, TVs, and Desktop app options

      • Copy the redirect URI from Scalekit (see next step) and paste it under Authorized redirect URIs.

        Create OAuth client ID form with Web application type and Authorized redirect URIs section

      • Click Create. Copy the Client ID and Client Secret.

        OAuth client detail page showing Client ID and Authorized redirect URIs

    4. Add credentials in Scalekit

      • In Scalekit dashboard, go to AgentKit > Connections > Create Connection. Search for Google Looker and click Create.

        Google Looker connector search in Scalekit dashboard

      • Copy the Redirect URI shown on the configuration page. Go back to Google Cloud Console and add this URI to your OAuth client’s authorized redirect URIs.

      • Return to Scalekit and enter your credentials:

        • Client ID (from Google Cloud Console)
        • Client Secret (from Google Cloud Console)

        Google Looker connection configuration in Scalekit

      • Keep Access Type set to Offline to receive a refresh token for long-lived access.

      • Click Save.

    5. Add a connected account

      Each end-user who connects their Looker instance needs a connected account. The Looker Instance Hostname is required — this is the hostname of the Looker instance the user is accessing (without https://), for example your-company.cloud.looker.com.

      Via the Scalekit dashboard (for testing)

      • Go to Connected Accounts > Add Account.
      • Enter the User ID and Looker Instance Hostname, then click Save.
      • Complete the Google OAuth flow in the popup to authorize access.

      Via the SDK (for production)

      Generate an authorization link and redirect your user to it. After the user authorizes, Scalekit stores the token automatically.

      const { link } = await scalekit.actions.getAuthorizationLink({
      connectionName: 'googlelooker',
      identifier: 'user_123',
      state: { instanceUrl: 'your-company.cloud.looker.com' },
      })
      // Redirect the user to `link` to complete OAuth
  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'googlelooker'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Google Looker:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'googlelooker_get_current_user',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • googlelooker_get_current_userRetrieve the profile of the currently authenticated Looker user, including their ID, display name, email, and role IDs.Read-only

    Get Current User

    Retrieve the profile of the currently authenticated Looker user, including their ID, display name, email, and role IDs.

    Inputs

    fieldsstring
    Comma-separated list of user fields to include in the response
  • googlelooker_get_dashboardRetrieve the full metadata of a Looker dashboard by its ID, including all tile definitions (charts, tables, text, filters), layout, linked Looks, and underlying queries.Read-only

    Get Dashboard

    Retrieve the full metadata of a Looker dashboard by its ID, including all tile definitions (charts, tables, text, filters), layout, linked Looks, and underlying queries.

    Inputs

    dashboard_idstringrequired
    The ID of the Looker dashboard to retrieve
    fieldsstring
    Comma-separated list of dashboard fields to include in the response
  • googlelooker_get_folderRetrieve a single folder by ID, including its name, parent folder, creator, and content counts.Read-only

    Get Folder

    Retrieve a single folder by ID, including its name, parent folder, creator, and content counts. Use List Folders first to find a folder ID.

    Inputs

    folder_idstringrequired
    The ID of the folder to retrieve
    fieldsstring
    Comma-separated list of folder fields to include in the response
  • googlelooker_get_lookRetrieve the metadata and definition of a saved Look by its ID: title, description, folder, owner, and underlying query ID.Read-only

    Get Look

    Retrieve the metadata and definition of a saved Look by its ID: title, description, folder, owner, and underlying query ID. Use Get Look Results or Run Look to execute it and fetch data.

    Inputs

    look_idstringrequired
    The numeric ID of the Look to retrieve
    fieldsstring
    Comma-separated list of Look fields to include in the response
  • googlelooker_get_look_resultsRun a saved Look and return results in the specified format.Read-only

    Get Look Results

    Run a saved Look and return results in the specified format. Executes the Look's underlying query against the connected database. Use result_format to control the output: json for structured data, csv for tabular export, xlsx for Excel.

    Inputs

    look_idstringrequired
    The numeric ID of the Look to fetch results from
    result_formatstringrequired
    Desired output format for results. Accepted values: json, json_detail, json_bi, csv, txt, html, md, xlsx, sql, png, jpg
    apply_formattingboolean
    Apply model-specified formatting to each result value
    apply_visboolean
    Apply visualization options to results
    cacheboolean
    Get results from cache if available. Set to false to force a fresh database query.
    cache_onlyboolean
    Retrieve any results from cache even if expired
    force_productionboolean
    Override development mode settings to force use of production models
    generate_drill_linksboolean
    Generate drill links for json_detail format
    image_heightinteger
    Render height for image formats (png, jpg)
    image_widthinteger
    Render width for image formats (png, jpg)
    limitinteger
    Maximum number of rows to return. May override the limit in the saved query.
    path_prefixstring
    Prefix to use for drill links (URL encoded)
    rebuild_pdtsboolean
    Rebuild Persistent Derived Tables (PDTs) used in the query
    server_table_calcsboolean
    Perform table calculations on query results server-side
  • googlelooker_get_queryRetrieve the definition of a previously created query by its ID: the model, explore, fields, filters, sorts, and row limit it was defined with.Read-only

    Get Query

    Retrieve the definition of a previously created query by its ID: the model, explore, fields, filters, sorts, and row limit it was defined with. Use Run Query to execute it and fetch data, or Create Look to save it as a Look.

    Inputs

    query_idstringrequired
    The ID of the query to retrieve
    fieldsstring
    Comma-separated list of query fields to include in the response
  • googlelooker_get_scheduled_planRetrieve a single Scheduled Plan by ID: its schedule (crontab/datagroup), destinations, and the dashboard, Look, LookML dashboard, or query it delivers.Read-only

    Get Scheduled Plan

    Retrieve a single Scheduled Plan by ID: its schedule (crontab/datagroup), destinations, and the dashboard, Look, LookML dashboard, or query it delivers.

    Inputs

    scheduled_plan_idstringrequired
    The ID of the scheduled plan to retrieve
    fieldsstring
    Comma-separated list of scheduled plan fields to include in the response
  • googlelooker_list_dashboardsList all dashboards in a Looker instance that the caller has access to.Read-only

    List Dashboards

    List all dashboards in a Looker instance that the caller has access to. Returns dashboard metadata including ID, title, folder, description, and last updated time.

    Inputs

    fieldsstring
    Comma-separated list of dashboard fields to include in the response

Workflows

Google OAuth consent screen verification

Before you use your own Google OAuth credentials in production, understand what end users see on Google’s consent screen when they authorize a connected account.

Audience typeConsent screen behaviorWhen to use
InternalShows your App Name and logo from Branding settingsOnly users in your Google Workspace or Cloud Identity organization can authorize the connector
ExternalShows {env_name}.scalekit.dev until Google verifies your appAny user with a Google account can authorize the connector

Why External is required for most AgentKit connectors:

  • Internal restricts authorization to users in your Google Workspace or Cloud Identity organization. Users with @gmail.com or other Google accounts outside your organization cannot complete OAuth.
  • External is required when end users outside your organization authorize tool access through connected accounts.
  • Organization-managed OAuth clients follow the same rules as personal or developer OAuth clients. Switching to an org-owned client does not bypass Google verification.
  • Until Google completes verification of your External app, users see scalekit.dev on the consent screen. After verification, your App Name and logo appear.

During development:

  • Add Test users under APIs & Services → OAuth consent screen while publishing status is Testing.
  • On unverified apps, users can click Advanced → Go to app (unsafe) to proceed during testing.
  • Google Workspace admins may need to allowlist your OAuth client.

For Google’s verification requirements and timeline, refer to Google’s OAuth consent screen verification guide.