Skip to content
cccskills
FreePublished on GitHub

bigquery

Query BigQuery data to examine analytics events, signups, pageviews, subscriptions, and customer usage. The skill provides guidance on tables, columns, joins, and SQL patterns for answering questions about metrics, funnels, and user activity.

OriginalShow the original description

Query BigQuery for analytics events, signups, pageviews, subscriptions, and user data. Use this skill when the user asks about metrics, funnels, user activity, or customer usage data.

BuilderIO/agent-native7,524 stars(GitHub 7,524 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Checking signup and pageview trends
  • Exploring a user activity funnel
  • Reviewing active subscriptions or customer usage
  • Finding analytics events for a customer

Files included (1)

  • SKILL.md12.4 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

BigQuery Integration

CRITICAL: BigQuery is a Native Agent Tool

bigquery is available directly in the agent's tool list as a native callable tool.

  • If you see bigquery in your available tools — call it directly with your SQL. Do not use HTTP workarounds, web-request hacks, or scripts as a substitute.
  • The server/lib/bigquery.ts description below is the underlying implementation. It does not mean BigQuery is only accessible via terminal commands or scripts.
  • When uncertain if the tool works, call it — don't reason your way to "it won't work". Empirically test by calling the tool.
  • Scripts (pnpm action) and the server lib are for dashboard UI code and CLI use. The agent calls BigQuery directly via its native tool.

Behavioral rule: "When uncertain if a tool works, call it — don't reason your way to 'it won't work'." Escalating to HTTP/web-request hacks before verifying the simple path fails is a bug in agent behavior.

Connection

  • Client: @google-cloud/bigquery Node.js client
  • Auth: GOOGLE_APPLICATION_CREDENTIALS_JSON env var (JSON credentials string), falls back to Application Default Credentials
  • Project: BIGQUERY_PROJECT_ID env var, defaults to your-project-id
  • Caching: 24-hour in-memory cache (sha256 of SQL), max 200 entries
  • Byte limit: maximumBytesBilled: 750GB per query

Server Lib

  • File: server/lib/bigquery.ts
  • Key export: runQuery(sql: string): Promise<QueryResult>
  • Return type: { rows, totalRows, schema, bytesProcessed, cached? } — NOT an array, always access .rows
  • Placeholder: @app_events resolves to analytics.events_partitioned (fully qualified)

General Table Usage Guidelines

Always use these canonical tables for specific use cases:

Use CaseTable to UseKey ColumnsNotes
Customer contractsdbt_mart.dim_contractscontract_id, company_id, start_date, end_date, contract_value, statusCanonical source for all contract data
HubSpot dealsdbt_mart.dim_dealsdeal_id, amount, stage_name, is_closed_won, close_dateNOT deal_amount or deal_stage
Active subscriptionsdbt_mart.dim_subscriptionssubscription_id, root_id, plan, status, subscription_arrFilter status = 'active'
Enterprise customersdbt_mart.enterprise_companiesJoins hubspot_companies + dim_contracts + organizationsHas health_status, renewal dates
ARRfinance.arr_revenue_tracker_latestunique_id, product, plan, status, arr_change, event_datearr changes on unique id level
All Trafficdbt_staging_bigquery.all_pageviews

Schema preferences:

  • Use dbt_mart.* for business-level queries (deals, contracts, subscriptions, customers)
  • Use dbt_staging_bigquery.* for raw event data (pageviews, signups)
  • Use dbt_analytics.* for reporting views
  • Avoid dbt_dev.* - development schema excluded globally

Table Map

Logical NameActual TableKey Columns
First pageviewsdbt_staging_bigquery.first_pageviewsvisitorid, url, referrer, created_date (TIMESTAMP), channel, utm*, user_id. No page_type — derive from URL.
All pageviewsdbt_staging_bigquery.all_pageviewsHas page_type, sub_page_type, first_touch_channel, session_channel, c_referrer, full utm fields
Signupsdbt_staging_bigquery.signupsvisitorid, user_id, root_organization_id, utm*, signup_url, created_date
Signups (enriched)dbt_analytics.product_signupsuserid, user_create_d (TIMESTAMP), channel, icp_flag, top_subscription, referrer, utm*
Blog metadatasigma_materialized.SIGDS_82deb8e2_40f8_4fb4_b3cb_caa011a72d29Cryptic column names — see mapping below. 858 rows, deduplicate by blog slug.
Blog content (old)test.builder_blog_contentcontentId, name (blog TITLE not author), handle, topic. Only 75 rows, no author. DO NOT use for author data.
CRM contactsdbt_mart.dim_hs_contactscontact_id (INT64), b_visitor_id, builder_user_id, ql_score, date_entered_mql/sal/s0/s1, lifecycle_stage_name
Dealsdbt_mart.dim_dealsdeal_id, amount (not deal_amount), stage_name (not deal_stage), is_closed_won (string), arr_amount, close_date, create_date
Subscriptionsdbt_mart.dim_subscriptionssubscription_id, root_id, space_id, subscription_arr, start_date, plan, status
Enterprise companiesdbt_mart.enterprise_companiesJoins hubspot_companies + dim_contracts + organizations. Has upcoming_renewal_date, health_status, customer_stage.
HubSpot companiesdbt_staging.hubspot_companiescompany_name, company_id, company_domain_name, upcoming_renewal_date, root_org_id, current_enterprise_arr

Sigma Blog Metadata Column Mapping

Cryptic ColumnMeaningExample Values
SUOHFYGIOGBlog URLhttps://www.example.com/blog/sample-post
H5YIATNDT5AuthorJane Doe, Alex Chen, Sam Patel, Taylor Kim
ZZJ6XRJAIIPublish date (TIMESTAMP)
FTRKLGZM1RPurposeAcquisition, Awareness
IFHWPU1IDOPersonaDevelopers, Product Managers, Engineering Leaders, Designers
Z52LFY52AKTopicAI, CMS, Web Development, Design
_DGCBJNKLESub-typeTooling, Development, Prototyping
JQL-G1QE-BSub-topicAI Design, AI Prototyping, AI Tools

Deduplication: Table has duplicates (http:// vs https://). Always deduplicate: REGEXP_EXTRACT(SUOHFYGIOG, r'/blog/([^/?#]+)') with ROW_NUMBER or DISTINCT.

Column Name Differences (bug sources)

Spec ColumnActual ColumnTable
first_pageview_datecreated_date (TIMESTAMP)first_pageviews
channel (pageviews)first_touch_channelall_pageviews
referrerc_referrerall_pageviews
referrer_channelsession_channelall_pageviews
user_create_dateuser_create_dproduct_signups
deal_stagestage_namedim_deals
deal_amountamountdim_deals
visitor_id → contactsb_visitor_iddim_hs_contacts
user_id → contactsbuilder_user_iddim_hs_contacts

Join Paths

  • Visitor → Signup: first_pageviews.visitor_id = signups.visitor_id
  • Visitor → Contact: first_pageviews.visitor_id = dim_hs_contacts.b_visitor_id
  • Signup → Contact: CRITICAL: Match on BOTH user_id AND email
    signups.user_id = dim_hs_contacts.builder_user_id
    AND signups.email = dim_hs_contacts.email
    
    Matching on both prevents mismatches from reassigned user IDs or data sync issues.
  • Signup → Subscription: signups.root_organization_id = dim_subscriptions.root_id
  • Contact → Deal: No direct FK. Use dbt_intermediate.deal_first_contact or lifecycle stage dates on dim_hs_contacts.
  • Blog → Author: builder_blog_content.contentId = content_with_models.content_id → dim_users.name

Datasets Overview

dbt_staging_bigquery (raw staged), dbt_analytics (reporting views), dbt_mart (dimensional models), dbt_intermediate (joins/transforms), analytics (raw events), finance (ARR tracking), sigma_materialized (Sigma-generated views with UUID names).

SQL Patterns

Deriving page_type from URL

CASE
  WHEN url LIKE '%/blog/%' THEN 'blog'
  WHEN url LIKE '%/docs/%' THEN 'docs'
  WHEN REGEXP_CONTAINS(url, r'example\.com/?(?:\?|$)') THEN 'marketing'
  WHEN url LIKE '%/sign-up%' THEN 'webapp'
  ELSE 'other'
END

Timestamps vs Dates

  • first_pageviews.created_date is TIMESTAMP — wrap: TIMESTAMP('2025-11-01')
  • product_signups.user_create_d is TIMESTAMP — same
  • dim_hs_contacts.sign_up_time_stamp is DATE — no wrapping
  • Use DATE(timestamp_col) before DATE_TRUNC to avoid type mismatch

Avoid double WHERE

-- WRONG
WHERE date BETWEEN '...' AND '...'
WHERE col IS NOT NULL

-- CORRECT
WHERE col IS NOT NULL AND date BETWEEN '...' AND '...'

Analytics Events (Amplitude)

Event column vs Name column

Agent chat events use event column, NOT name column (often NULL). Use event = 'agent chat message submitted'.

Preferred table for agent chat events

Use Amplitude (amplitude.EVENTS_182198) instead of @app_events — smaller, stays within byte limits:

  • Use event_type (not event) and event_time (not createdDate)
  • rootOrganizationId and organizationId in event_properties JSON
  • builderSpaceId is NULL for agent chat events
  • Always use capTo30Days() helper for Amplitude time series

Enterprise customer identification

  • data.isEnterpriseCompany is unreliable — most enterprise events have it false/missing
  • Preferred: JOIN to dim_subscriptions on rootOrganizationId, filter LOWER(plan) = 'enterprise' AND status = 'active'

Key agent chat event types

EventDescription
agent chat message submittedUser sends message in AI chat
visual editor ai chat message submittedUser sends message in Visual Editor AI
agent chat message completedAI response completed
agent chat code appliedUser applied generated code

Customer agent chat message lookup pipeline

  1. HubSpot deal → company → contacts
  2. dim_hs_contacts (contact_id is INT64) → builder_user_id
  3. signups → root_organization_id
  4. Amplitude events WHERE JSON_VALUE(event_properties, '$.rootOrganizationId') IN (...)
  5. Always filter out internal team emails — internal SEs show up in customer org events

Dashboard Data Fetching (CRITICAL)

NEVER use scripts for dashboard UI data. Use useMetricsQuery(queryKey, sql) with direct BigQuery SQL:

  • Define SQL in queries.ts alongside the dashboard
  • Queries go through authenticated /api/query endpoint
  • For customer lookups, use CTEs with JOINs to dim_hs_contacts
  • Scripts are for CLI/agent use only

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

a2a-assets

FreeSummary

Generate, refine, export, and place brand images or videos from an Assets library into another app. The skill covers choosing a library, handling image batches and video runs, and updating selected assets after feedback.

  • Generate brand images for slides or another app
  • Refine an existing asset after feedback
  • Create and export a video asset
BuilderIO/agent-native7.5KUpdated Oct 26, 2026

account-health

FreeSummary

Prepare a customer account health, renewal, or contract usage readout. Verify the account identity, use approved metric definitions, compare contracted capacity with actual usage, and trace findings to sources, time windows, and known gaps.

  • Preparing a named customer's account health review
  • Comparing contracted seats or capacity with usage
  • Gathering adoption signals before a renewal or QBR
BuilderIO/agent-native7.5KUpdated Oct 26, 2026

actions

FreeSummary

Create focused app actions that agents can call as tools and frontend code can use through client hooks. Use them to add provider integrations or fetch UI data, with validated inputs and structured results.

  • Adding a new app operation
  • Connecting an external provider API
  • Fetching data for a frontend view
BuilderIO/agent-native7.5KUpdated Oct 26, 2026

adding-a-feature

FreeSummary

Use this checklist when adding a feature or integration to an agent-native app. It covers the user interface, agent-callable actions, instructions, and app-state sync so both the user and agent can work with the capability consistently.

  • Planning a new feature across UI and agent actions
  • Checking that agent changes appear in the UI
  • Documenting actions and feature state for the agent
BuilderIO/agent-native7.5KUpdated Oct 26, 2026

adhoc-analysis

FreeSummary

Investigate complex questions by combining data from multiple sources, then summarize patterns, metrics, and evidence in a clear report. Save requested analyses as dashboards with instructions for future refreshes.

  • Comparing CRM deals with call records
  • Investigating customer health across systems
  • Saving a repeatable performance analysis
BuilderIO/agent-native7.5KUpdated Oct 26, 2026

admin-surfaces

FreeSummary

Use the Analytics admin surfaces to inspect and change workspace feature flags, review dashboard ownership and usage activity, or browse and edit databases connected from other agent-native apps. The skill guides administrators to the relevant view and actions.

  • Review dashboard owners, views, and edits
  • Change a workspace feature flag for an app
  • Browse or edit a connected app database
BuilderIO/agent-native7.5KUpdated Oct 26, 2026

See all skills by BuilderIO

Report a problem with this skill