# Get Your App's Own Usage Stats Set up your AI chatbot to fetch and send its own activity reports -- daily, weekly, or on demand. No coding required. --- Your chatbot can send you (or any team member) regular usage reports -- *"You had 47 conversations this week, 12 unique people, 318 messages"* -- without you ever logging into the dashboard. This guide walks through setting it up by chatting with the Alchemist. No code, no copy-paste of API keys into config files. ## What you'll build By the end, your app will have a new tool called `fetch_my_app_usage` (you can name it anything). You can use it three ways: - **In chat**: ask your bot *"how many conversations did we have this week?"* and it'll answer with live numbers. - **In the Heartbeat**: schedule the bot to email you a weekly summary automatically. - **From any channel**: WhatsApp, Slack, email -- anywhere your bot runs. > **Note:** This setup uses **Custom Actions** and (for the optional weekly summary) **Heartbeat**, both of which require a **Builder plan or higher**. The Builder API itself has no tier gate, but the custom HTTP action that calls it does. > href="https://build.chipp.ai/plans" > target="_blank" > rel="noopener noreferrer" > > > > Upgrade to Builder → > ## Before you start You'll need: - A Chipp app you've already created on a **Builder** plan or higher - Access to the Alchemist panel (the AI assistant on the right side of the builder) - About 5 minutes ## Step 1 -- Ask the Alchemist to set everything up **1.** Open your app and open the Alchemist Go to [build.chipp.ai](https://build.chipp.ai), open the app you want to monitor, and click the Alchemist panel on the right (the AI assistant). **2.** Paste this prompt into the Alchemist ``` Set up a tool so this app can fetch its own usage stats. Use the Builder API at /api/v1/apps/{appId}/analytics/usage. Create the Builder API key, save it as a secret variable called BUILDER_API_KEY, and wire it into a custom HTTP action called fetch_my_app_usage. ``` The Alchemist will respond in three stages: 1. **Create the API key.** The Alchemist mints a Builder API key for this app and shows you the raw value once -- it starts with `chipp_`. Save it somewhere safe (your password manager, a sticky note, anywhere offline). You won't see the raw key again. *If you lose it, ask the Alchemist to revoke the old key and create a new one -- your data isn't lost, only the key.* 2. **Open a secure form.** The Alchemist will pop up a form titled "Builder API Key" (or similar) with a single field. **Paste the raw key into the form and click Save.** The value is encrypted on our servers; nobody, including Chipp staff, can read it back. 3. **Build the custom action.** The Alchemist creates a new HTTP action called `fetch_my_app_usage`. You'll see it appear under **Build → Actions** in your app (scroll past the integrations to the Custom Actions card). The action's `Authorization` header is wired to `Bearer {{var.BUILDER_API_KEY}}`, so the encrypted key is substituted in only when the action runs -- it never appears in chat history or logs. **3.** Verify it worked Still in the Alchemist chat, type: ``` Test the fetch_my_app_usage action and show me the result. ``` You should see a JSON response with a `summary` object containing `total_sessions`, `unique_consumers`, and `total_messages`, plus a `timeseries` array. If you instead see a 401 Unauthorized error, the key was pasted wrong -- ask the Alchemist *"Re-collect the BUILDER_API_KEY value"* and repeat stage 2. ## Step 2 -- Test it in the deployed chat Open your app's public chat (Publish → Share → open your chat URL) and try: - *"How many conversations have we had this week?"* - *"Give me a usage summary for the last 30 days."* - *"Compare this week to last week."* Your bot will call `fetch_my_app_usage` behind the scenes and answer with live numbers from the database. The numbers are the same ones you'd see on the **Insights → Overview** page in the builder. > **Warning:** Live conversation counts include sessions still in progress. If you want strict "completed conversations only", phrase your question like *"how many ended conversations did we have this week"* -- the bot will pick the right filter from the response. ## Step 3 -- Wire it into the Heartbeat (optional) The [Heartbeat](/docs/guides/heartbeat) is a separate feature that lets your bot proactively message you (or your customers) on a schedule. Because the Heartbeat agent loop shares the same tools as regular chat, your new `fetch_my_app_usage` action is automatically available to it -- no extra wiring. **1.** Open Heartbeat settings From your app, navigate to **Publish → Heartbeat**. **2.** Enable Heartbeat and pick a schedule Toggle on **Enable heartbeat**. Choose: - **Schedule**: *Weekly, Monday at 9:00 AM* (or daily, or every-N-hours) - **Channel**: *Email* (so the report lands in your inbox) - **Recipients**: add your own email under **Additional recipients** or **Curated list** **3.** Write the heartbeat instructions In the **Instructions** field, paste something like: ``` Every Monday morning, call fetch_my_app_usage to get the past week's stats and email me a short summary. Format it like: "Here's your weekly report for {date range}: - {N} conversations - {N} unique people - {N} total messages" If conversations are up 20%+ from the previous week, mention the growth. If they're down 20%+, flag it as a heads-up. Always send the report on Mondays, even if nothing changed. ``` The last sentence matters: by default Heartbeat suppresses messages when the AI decides there's nothing worth saying. Telling it to *always* send the report overrides that for reporting use cases. **4.** Send a test Scroll to the **Test Heartbeat** card at the bottom, pick your own account in the consumer picker, and click **Send Test**. You should get an email within ~30 seconds. From then on, the heartbeat runs on the schedule you picked. ## What stats are available? Two endpoints today, both read-only: | Endpoint | Returns | |----------|---------| | `/api/v1/apps/{appId}/analytics/usage` | Total sessions, unique consumers, total messages, plus a day/week/month timeseries | | `/api/v1/apps/{appId}/analytics/token-usage` | Total tokens consumed (input/output), per-model breakdown -- useful for cost monitoring | See the full [Analytics endpoint reference](/docs/builder-api/analytics) for query parameters and response fields. If you want **per-model token costs** in your weekly email, repeat Step 1 with a second prompt: ``` Create a second custom action called fetch_my_token_usage that calls /api/v1/apps/{appId}/analytics/token-usage with the same BUILDER_API_KEY variable I already saved. ``` The Alchemist will reuse the secret variable you already saved -- no new key needed. ## How the security works (short version) - The Builder API key starts with `chipp_` and is **scoped to a single app**. It can't read another app's data. - The raw key is shown to you exactly once at creation. We store only a SHA-256 hash. You can't recover the raw key from us -- only revoke and replace it. - When you saved the key into the secure form, it was encrypted with the platform's per-app encryption key. The custom action references it via `{{var.BUILDER_API_KEY}}`, which the platform substitutes server-side at runtime. The raw value never appears in chat history, the Alchemist's tool arguments, or any log file. - To revoke a key (for rotation or after a leak), ask the Alchemist *"Revoke the Builder API key called 'Weekly stats reader'"* (or whatever you named it). Old custom actions will start returning `401 Unauthorized`. Mint a new key and update the secret variable to replace it. See the [Variables and Secrets](/docs/custom-actions/variables) reference for more on how secret variables are stored. ## Troubleshooting | Symptom | Cause | Fix | |---------|-------|-----| | Alchemist says "I created the variable but the value is empty" | You closed the secure form without pasting the key | Ask the Alchemist *"Re-collect the BUILDER_API_KEY value"* and paste the raw key | | Bot says "I couldn't fetch usage" or shows a 401 | Key was pasted wrong, or the key was revoked | Mint a new key with *"Create a new Builder API key and update BUILDER_API_KEY"* | | Bot says "I don't know how to do that" | The custom action wasn't actually created | Check **Build → Actions** -- if `fetch_my_app_usage` isn't listed in the Custom Actions card, repeat Step 1 | | Heartbeat email never arrives | The AI decided nothing needed reporting | Add *"Always send the report, even when there's no change"* to your heartbeat instructions | | You want to share this report with a team member | They don't need the API key -- the bot itself does the fetching | Just add their email to the heartbeat's recipient list | ## What's next - **Schedule per-customer digests**, not just self-reports: in your heartbeat instructions, ask the bot to compose personalized summaries for each consumer. The bot still has access to `fetch_my_app_usage` for org-wide context. - **Pull stats into Google Sheets**: build a second app on Chipp that calls the Builder API on a schedule and writes results to a sheet via the Google Sheets hosted integration. - **Cross-app dashboards**: Builder API keys are scoped per-app. To monitor several apps from one place, mint a key per app, save each as a separate secret variable in your dashboard app (e.g. `STATS_KEY_APP_A`, `STATS_KEY_APP_B`), and create one custom action per app. ## See also - [Builder API Overview](/docs/builder-api/overview) -- full endpoint reference - [Analytics endpoints](/docs/builder-api/analytics) -- usage and token-usage fields - [Heartbeat](/docs/guides/heartbeat) -- proactive outreach setup - [Variables and Secrets](/docs/custom-actions/variables) -- how encrypted application variables work - [The Alchemist](/docs/guides/alchemist) -- your AI builder assistant