# Agency workspaces
Source: https://docs.chartcastr.com/admin/agency-workspaces
Manage multiple client accounts from a single Chartcastr dashboard with consolidated billing and shared integrations.
Agency workspaces let you manage multiple client accounts from one parent organization. Each client gets their own isolated workspace with separate data, connections, and members, while billing consolidates to a single invoice on the parent account.
## Getting started
Agency workspaces require the **Agency plan**. To upgrade:
Reach out via [the agency page](/agencies) or email [support@chartcastr.com](mailto:support@chartcastr.com) to discuss your needs and get set up on the Agency plan.
Once activated, your existing organization becomes the **parent agency workspace**. All billing flows through this account.
Navigate to **Admin > Agency** in the sidebar. Click **Create client** to launch the setup wizard.
## Creating a client workspace
The Create Client wizard walks through four steps:
1. **Name** -- enter your client's business name (e.g. "Harvey Norman", "JB Hi-Fi")
2. **Branding** -- add the client's domain to auto-fetch their logo, or upload one manually
3. **Invite** -- add team members by email and assign admin or member roles
4. **Review** -- confirm details and create the workspace
Once created, the client workspace appears in your sidebar under **Clients**. Switch between workspaces with a single click.
## Sidebar navigation
The sidebar adapts based on your workspace type:
* **Agency parent**: Shows a "Clients" section listing all child workspaces with a quick-switch combobox
* **Client workspace**: Shows a "Back to \[agency]" link and a sibling switcher if you have access to multiple clients
## Shared Slack setup
Instead of installing Chartcastr's Slack app separately in each client workspace, you can **delegate** your parent Slack integration:
1. Install the Chartcastr Slack app in your agency's Slack workspace (if not already done)
2. Navigate to a client workspace's settings
3. Click **Delegate parent's Slack**
4. Select which Slack channels the client workspace can deliver to
Channel allowlists prevent client workspaces from accessing agency-internal channels. Each client only sees the channels you explicitly grant.
## Billing
* **One invoice** covers all client workspaces -- no separate billing per client
* Each active client workspace is billed at a per-workspace rate ($20--$40/month depending on tier)
* **Paused** client workspaces are not billed
* Per-client tiers (Starter, Pro, Enterprise) and coupons can be set from the Agency dashboard
* View per-client contribution breakdowns on the **Invoices** tab
## Managing client workspaces
From **Admin > Agency** you can:
* **Pause / unpause** a client workspace (stops billing, preserves data)
* **Set billing tier** per client (Starter, Pro, Enterprise)
* **Apply coupons** per client for discounted rates
* **Detach** a client workspace (severs the parent-child link)
* **Request access** to a client workspace you haven't joined yet
## Limits
* Default limit: **10 client workspaces** per agency
* Each child workspace inherits the full Pro-tier feature set
* Workspaces are fully isolated -- data, connections, and members don't cross between clients
* Need more than 10 clients? [Get in touch](/agencies)
## Related docs
The full agency model explained.
Step-by-step guide to setting up your agency.
Pricing, invoices, and per-client tiers.
Create, pause, and configure client workspaces.
# Invoices
Source: https://docs.chartcastr.com/admin/billing/invoices
Access, view, and download PDF invoices for your Chartcastr subscription. Manage billing details and track your organization payment history.
## Overview
Manage your billing history and download past invoices for your records.
## How to Access
You can view and download all your past invoices in the Billing section of your organization settings.
1. Go to [Billing](https://chartcastr.com/admin/manage/org/organization-billing).
2. Click on the **Invoices** tab or section.
3. You will see a list of all past transactions.
4. Click **Download** on any invoice to get a PDF version.
## Billing Details
You can update the billing address and email shown on your invoices in the **Billing Settings** section.
# Payment methods
Source: https://docs.chartcastr.com/admin/billing/payment-methods
Add, update, or remove credit cards and payment methods on your Chartcastr account. All payments are securely processed through Stripe.
## Overview
Manage the credit cards and payment methods associated with your Chartcastr account.
## How to Update
To update your credit card or change your primary payment method:
1. Go to [Billing](https://chartcastr.com/admin/manage/org/organization-billing).
2. Click on **Payment Methods**.
3. Click **Add Payment Method** to add a new card.
4. To remove a card, click the trash icon next to it (provided you have another valid card on file if on a paid plan).
## Security
We use **Stripe** for secure payment processing. Your full credit card details are never stored on our servers.
# Subscription plans
Source: https://docs.chartcastr.com/admin/billing/plans
Compare Chartcastr Free, Starter, Pro, and Enterprise plans. Upgrade or downgrade anytime to match your team size and feature needs.
## Overview
Chartcastr offers several plans tailored to different needs, from individual developers to large enterprises.
## Available Plans
* **Free**: Forwarder-only. Up to 2 metrics from any integration, delivered on a daily schedule to Slack, email, Teams, or Google Chat. No AI summaries, chat, or follow-ups. No credit card to enter.
* **Starter**: All paid features at entry-level limits — AI summaries on every pulse, AI chat, AI follow-ups, 10 active Slack connections, 14-day free trial (card required to start).
* **Pro**: Unlimited connections, unlimited AI, granular scheduling, webhooks, and priority support.
* **Enterprise**: Custom limits, BYOK, dedicated account management, and SLAs.
For a full comparison, visit our [pricing page](https://chartcastr.com/pricing).
## Changing Plans
You can upgrade or downgrade your plan at any time in [Billing](https://chartcastr.com/admin/manage/org/organization-billing). Use the button below to manage your subscription directly in the app.
# Connections
Source: https://docs.chartcastr.com/admin/connections
Create and manage connections that link data sources to destinations like Slack, Teams, and email. Configure schedules, AI summaries, and delivery options.
## Overview
Connections link your data sources to destinations, enabling automatic chart delivery. Each connection defines what chart to fetch, where to send it, and when to deliver it.
## Connection Components
A connection consists of:
1. **Source**: Where the chart comes from (Google Sheets, HubSpot, Shopify, etc.)
2. **Destination**: Where to send it (Slack, Teams, Email, etc.)
3. **Schedule**: When and how often to send
4. **Configuration**: Message format, AI summary, and other options
5. **Context**: Extra text context about this chart or group.
## Creating a Connection
Select an existing source or create a new one
Select where to send the chart
Set up when and how often to send
Configure message format and options
Send a test delivery to verify setup
Enable the connection to start automatic delivery
## Connection List
The Connections page shows all your configured connections:
| Column | Description |
| --------------- | --------------------------------- |
| **Name** | Connection display name |
| **Source** | Data source (Google Sheets, etc.) |
| **Destination** | Where charts are sent |
| **Schedule** | Frequency of delivery |
| **Status** | Active, Paused, or Error |
| **Last Run** | Most recent delivery time |
| **Next Run** | Upcoming scheduled delivery |
| **Actions** | Test, Edit, Pause, Delete |
## Schedule Configuration
When creating or editing a connection, you can configure how often charts are delivered. The following frequency options are available:
### Frequency Options
| Option | Description |
| --------------- | -------------------------------------------------------- |
| **Every Hour** | Delivers once per hour, on the hour |
| **Every Day** | Delivers once per day at a specific time |
| **Every Week** | Delivers on selected days of the week at a specific time |
| **Every Month** | Delivers once per month with flexible day options |
### Monthly Day Options
When using the **Every Month** frequency, you can choose from three day-of-month options:
Choose a specific day of the month (1–27) for delivery. If you need end-of-month delivery, use the "Last Day" option instead.
Delivers on the first weekday (Monday–Friday) of each month. If the 1st of the month falls on a weekend, delivery automatically moves to the following Monday.
**Examples:**
* If the 1st is a Tuesday → delivers on the 1st
* If the 1st is a Saturday → delivers on the 3rd (Monday)
* If the 1st is a Sunday → delivers on the 2nd (Monday)
Delivers on the last calendar day of each month, regardless of how many days the month has.
### Time and Timezone
All schedule times use your organization's configured timezone. You can set your timezone in [Settings → Organisation](https://chartcastr.com/admin/settings?highlight=timezone).
## Plans & Premium Integrations
All users can set up connections with any integration — including configuring, testing, and previewing chart delivery. However, some integrations (such as Shopify, Meta Ads, Xero, Google Search Console, Google Ads, and HubSpot) are premium and require a paid plan to activate.
If you're on the free plan, connections using premium integrations will be created but cannot be enabled until you upgrade. You'll see an error message when attempting to activate them.
Some integrations are currently in **private beta** and may require an invitation to access. Contact us if you're interested in early access.
## Connection Status
Running normally on schedule
Temporarily disabled
Requires attention
## Next Steps
Connect Google Sheets or other data providers.
Configure Slack, Teams, or Email for chart delivery.
# Admin dashboard
Source: https://docs.chartcastr.com/admin/dashboard
Your central hub for managing Chartcastr connections, organization settings, team members, and billing from a single dashboard view.
The Admin Dashboard is your central hub for managing all aspects of Chartcastr. From here you can manage your data connections, configure organizational settings, and track your subscription.
Manage your active data sources and delivery destinations.
Configure organization-wide settings like Pulse Thread Linking and AI Language.
Invite members, manage your profile, and handle organizational updates.
View plans, manage invoices, and update payment methods.
## Next Steps
Connect a source to a destination to start automating your visual insights.
Fine-tune your AI analysis and organizational preferences.
# Add email addresses
Source: https://docs.chartcastr.com/admin/manage/add-emails
Add and verify additional email addresses for your Chartcastr organization to use for notifications, billing, and member management purposes.
## Overview
Add additional email addresses to your organization for notifications, billing, or member management.
## How to Add
1. Go to [Manage → Organisation Profile](https://chartcastr.com/admin/manage/org/organization-general) (or the Notifications tab).
2. Look for the **Email Addresses** section.
3. Click **+ Add Email**.
4. Enter and verify the new email address.
# Archived items
Source: https://docs.chartcastr.com/admin/manage/archived-items
Archive and restore Chartcastr sources and connections. Stop scheduled deliveries while preserving configuration and historical data for later use.
## Overview
When you no longer need a source or a connection but want to keep its configuration or historical data, you can **Archive** it. Archiving removes the item from your active lists but keeps it available for future restoration if needed.
## Archiving a Connection
Connections can be archived at any time. Archiving a connection will immediately stop all scheduled deliveries associated with it.
1. Go to [Connections](https://chartcastr.com/admin/connections).
2. Locate the connection you wish to archive.
3. Click the **Archive** button (or select it from the actions menu).
## Archiving a Source
To maintain data integrity, a source can only be archived if it has **no active connections** pointing to it.
If you try to archive a source that still has active connections, you will be prompted to archive those connections first.
1. Go to [Sources](https://chartcastr.com/admin/sources).
2. Ensure all connections linked to this source are archived or deleted.
3. Click the **Archive** button on the source.
## Finding Archived Items
Archived items are hidden by default to keep your active workspace clean. You can find them by clicking the "See archived..." links located at the bottom of the Sources and Connections pages.
## Resurrecting Items
If you desperately need to restore an archived item:
1. Navigate to the archived items list (see above).
2. Locate the archived source or connection.
3. Click the **Restore** or **Resurrect** button.
4. The item will move back to your active list and resumes its previous configuration.
Sources should usually be restored before their associated connections if you plan on re-activating the entire pipeline.
# Google account connection
Source: https://docs.chartcastr.com/admin/manage/google-account
Manage the Google account linked to Chartcastr for Sheets, Docs, and Drive access. Understand the impact of disconnecting on your active pulses.
## Overview
Chartcastr uses your Google account to access data from Google Drive, Sheets, and Docs. Managing this connection is critical for the continued functioning of your pulses.
## Connection Status
You can view your connected Google account in [Manage → Connected Accounts](https://chartcastr.com/admin/manage/account).
## Impact of Removal
**Profound Impact**: Removing or disconnecting your Google account will immediately break all pulses and connections that rely on Google-based data sources.
This includes:
* **Google Sheets connections**: Any pulse fetching data from a sheet will fail.
* **Google Docs/Sheets Context**: Any pulse using Google Drive files for [External Context](/analysis/context/overview) will lose that context, potentially degrading AI analysis quality.
## Best Practices
* Ensure the connected Google account has access to all the files you intend to use.
* If you need to switch accounts, re-link your sources immediately to minimize downtime.
# Invite team members
Source: https://docs.chartcastr.com/admin/manage/invite-members
Invite colleagues to your Chartcastr organization by email. Assign Admin or Member roles to control access to pulses, connections, and settings.
## Overview
Collaborate with your team by inviting them to your Chartcastr organization. Invited members will have access to view and manage pulses, connections, and settings according to their role.
## How to Invite
1. Go to [Manage → Members](https://chartcastr.com/admin/manage/org/organization-members).
2. Click **Invite Member**.
3. Enter the email address of the person you want to invite.
4. Select a role (e.g., Admin or Member).
5. Click **Send Invitation**.
Team members will receive an email with a link to join your organization.
# Leave an organization
Source: https://docs.chartcastr.com/admin/manage/leave-org
Leave your current Chartcastr organization, understand admin restrictions on departure, and learn how to regain access if you need to return.
## Overview
If you no longer need access to an organization, you can choose to leave it.
**Important**: If you are the last admin of an organization, you may not be able to leave until you promote another member to Admin or delete the organization.
## How to Leave
1. Go to [Manage → Organisation Profile](https://chartcastr.com/admin/manage/org/organization-general).
2. Scroll to the bottom and click **Leave Organisation**.
3. Confirm your choice in the dialog.
## Getting Back In
If you leave an organization and no one else has access to grant you entry, you may lose access permanently.
To get back into an organization after leaving (if there are no other admins), you may have to contact **Chartcastr Support** to be manually re-added.
# Update organization profile image
Source: https://docs.chartcastr.com/admin/manage/update-profile-image
Upload a custom profile image for your Chartcastr organization. This image appears in the sidebar and notification messages to identify your workspace.
## Overview
Personalize your workspace by uploading an organization profile image. This image appears in the sidebar and in notifications to help identify your workspace.
## How to Update
1. Go to [Manage → Organisation Profile](https://chartcastr.com/admin/manage/org/organization-general).
2. Click on the profile image or the **Edit** button.
3. Upload a square image (PNG or JPG recommended).
4. Save your changes.
# Usage and limits
Source: https://docs.chartcastr.com/admin/manage/usage
Monitor AI chat messages, monthly pulse deliveries, and AI analysis quotas in real time. View plan limits for your Chartcastr organization.
## Overview
Manage your workspace effectively by monitoring your organization's usage. Chartcastr provides a real-time view of your metered features, deliveries, and AI consumption.
You can access your current usage stats at [Manage → Usage](https://chartcastr.com/admin/manage/usage).
## Metered Features
Chartcastr tracks several core features to ensure fair use and platform stability.
### AI Chat Messages
Usage is tracked on a daily basis. Each message sent to the AI Chat counts towards your daily quota.
* **Daily Reset**: Your message count resets every 24 hours.
* **Tier Limits**: Limits vary depending on whether you are on the Free, Starter, or Pro plan.
### Monthly Deliveries (Pulses)
This tracks the total number of pulse deliveries (Slack messages, Teams messages, or Emails) sent in the last 30 days.
* **Rolling View**: This is a rolling 30-day window, not a calendar month reset.
### AI Analyses
Tracks the number of AI-powered insights generated across your connections and pulses. This includes automated summaries and deep-dive analysis.
## Plan Features & Restrictions
Different tiers of Chartcastr provide different levels of access. You can view the full comparison table in your dashboard.
### Key Categories
| Category | Description |
| :--------- | :----------------------------------------------------------- |
| **Limits** | Maximum number of connections, sources, and seats. |
| **AI** | Access to advanced models (Claude 3.5/4) and message quotas. |
| **Pulses** | Frequency and volume of automated deliveries. |
## AI Quotas & BYOK
We use high-performance LLMs to analyze your data. Each analysis consumes tokens which we aggregate into your daily message quotas.
### Bring Your Own Key (BYOK)
If you require significantly higher volume or want to bypass platform AI limits, the **Pro tier** allows you to "Bring Your Own Key". This lets you plug in your own Anthropic or OpenAI API keys to power Chartcastr's AI features directly.
## Need Higher Limits?
If you find yourself hitting your limits frequently, consider [upgrading to a higher plan](https://chartcastr.com/admin/upgrade) to gain access to unlimited connections and higher quotas.
# Pulse Score
Source: https://docs.chartcastr.com/admin/pulse-score
An AI-generated 0-100 business performance snapshot covering growth, efficiency, marketing, product, and financial health category scores.
Pulse Score is Chartcastr's AI-generated snapshot of how your business is performing based on the connected sources in your workspace. It combines recent data coverage, category scoring, and AI-written narrative into a report you can review internally or publish as a public profile.
## What It Includes
Each Pulse Score report includes:
* **Overall score**: A 0-100 summary of your current performance snapshot
* **Category breakdowns**: Separate scores and grades for Growth, Efficiency, Product, Marketing, and Financial health
* **Public narrative**: A concise summary written for external sharing
* **Private insights**: Internal-only observations and recommended actions
* **Coverage window**: The time period used for the current analysis
## How It Works
Pulse Score runs automatically from your connected workspace data.
1. Chartcastr gathers the latest eligible source data for your organization.
2. AI analyzes that data across the Pulse Score categories.
3. Chartcastr generates an overall score, category scores, public narrative, and private recommendations.
4. The latest completed analysis becomes the version shown in your workspace.
Pulse Score is no longer intended as a manual reporting workflow. The main experience is an automatically refreshed score built from your connected data.
## What You Can Do In The Admin Page
The [`/admin/pulse-score`](https://chartcastr.com/admin/pulse-score) page combines internal review and publishing controls in one place.
### Internal Review
Use the internal review section to:
* Inspect the latest overall score
* Switch between numeric scores and letter grades
* Review the analysis coverage period
* Read the AI-generated public narrative
* See private insights and recommended actions
### Public Profile Preview
Pulse Score can also be published as a public profile at `chartcastr.com/pulse/{your-slug}`. When visibility is on, your profile is also listed in the [Pulse Score Directory](https://chartcastr.com/pulse) — a public index of organizations sharing their scores openly.
From the admin page you can:
* Preview the public-facing version before publishing
* Open the live public page when visibility is enabled
* Copy the public link for sharing
* Share directly to LinkedIn, X, or Reddit using the **Share** button
### Publishing Controls
Pulse Score includes built-in controls for managing how your profile appears publicly.
* **Public Visibility**: Turn your public profile on or off
* **Public URL slug**: Choose the URL used for your public Pulse Score page (rate-limited to one change per week once set)
* **Website link**: Add an external link displayed on the public profile (paid plans)
* **Organisation logo**: Reuse your workspace logo on the public page
Your public profile only shows the overall score, category grades, and AI-generated narrative. Private insights and recommended actions are never exposed publicly.
## Public Metric Sharing
The Pulse Score admin includes a dedicated **Public Metric Sharing** tab. Each public metric page is powered by a real `PUBLIC_METRIC_PULSE` destination + connection, so it inherits the same scheduling, run history, and cache-refresh behavior as other connections.
* **Share path**: Each pulse is accessible at `/pulse/{your-org-slug}/{pulse-slug}`.
* **Auto slug**: The pulse slug is generated from the pulse name by default, then stored on the destination metadata and pulse record.
* **Cached snapshot**: Successful/unchanged scheduled runs refresh the public metric snapshot cache (chart metadata, key metrics, AI narrative, and share image).
* **Pulse Score tab role**: Pulse Score acts as an index and quick-action surface (visibility toggle, copy link, regenerate, open destination/connection).
### Create Flow
1. Start in **Connections** and create a new connection.
2. Pick a source or source group.
3. Choose **Public Metric Pulse** as destination type.
4. Save the connection. The system creates/updates the linked public pulse automatically.
5. Configure local pulse settings from destination or connection detail pages.
By default, Public Metric Pulse connections start on a weekly schedule (`Sunday 00:00`) and can be adjusted from the connection page.
### Global Vs Local Config
* **Global (org-level)**: Managed in Organisation Settings (`highlight=pulse-score`) and linked from [`/admin/pulse-score`](https://chartcastr.com/admin/pulse-score). This controls Pulse Score public profile defaults.
* **Local (destination/connection-level)**: Managed on the `PUBLIC_METRIC_PULSE` destination and its connection. This controls pulse name, slug, description, highlight color, visibility, and run cadence/history for that specific public metric page.
Use the [`/admin/pulse-score`](https://chartcastr.com/admin/pulse-score) page to monitor all public pulses and jump into destination/connection pages for edits.
## Scoring Model
Pulse Score currently evaluates five categories:
* **Growth**: Signals related to momentum, pipeline, and expansion
* **Efficiency**: How effectively the business converts activity into results
* **Product**: Product adoption, usage, or retention-oriented indicators
* **Marketing**: Acquisition and campaign performance signals
* **Financial**: Revenue and financial health indicators where available
The exact inputs vary depending on which sources are connected and what data is available in your workspace.
More connected sources generally give the AI more context and improve the quality of the resulting narrative and recommendations.
## Public Vs Internal Data
Not everything in Pulse Score is meant for external audiences.
* **Public profile**: Overall score, category breakdown, and public narrative
* **Internal workspace view**: Everything above, plus private insights and recommended actions
This lets you share a polished public snapshot while keeping more candid operational guidance inside your workspace.
## Refresh Timing
Pulse Score refreshes automatically as new connected data becomes available. The page also shows when the latest completed analysis was updated and the date range used for that analysis.
If you do not see a score yet, your organization may still be waiting for the first automatic run to complete.
## Related Docs
Learn how scheduled updates and AI summaries flow through Chartcastr.
Understand the rest of the workspace navigation and admin surface.
Browse public Pulse Scores from organizations sharing their performance openly.
Set up source connections that power your Pulse Score analysis.
# Pulses
Source: https://docs.chartcastr.com/admin/pulses
Pulses are scheduled chart deliveries enriched with AI analysis. Learn how data fetching, AI summaries, and delivery scheduling work together.
Pulses are the heartbeat of Chartcastr. They represent the automated flow of data from your sources to your destinations, enriched with AI analysis.
## The Data/Chart
When a pulse triggers, Chartcastr fetches the latest data from your connected source (e.g., Google Sheets, HubSpot, Shopify). This data is then visualized according to your configuration, creating a snapshot of your key metrics at that specific moment in time.
## AI Summaries
Available on > Starter plans only
Beyond just raw data, Chartcastr uses AI to analyze the trends and changes in your data. The AI generates a concise summary, highlighting significant movements, anomalies, or "business as usual" states, giving you immediate context without needing to deep-dive into the numbers.
## Scheduling / Timing
You can schedule pulses to run at specific intervals (e.g., daily at 9:00 AM, weekly on Mondays).
**Timing Best Practice**
Ensure that your source data (e.g., your Connected Sheet refresh or your spreadsheet update) refreshes well **BEFORE** the Chartcastr pulse is scheduled to kick off. This ensures your pulse always captures the freshest data.
## Next Steps
Ask contextual questions about pulses in your Slack threads.
Group sources together for unified analysis.
# AI summary locale
Source: https://docs.chartcastr.com/admin/settings/locale
Choose the language, tone, and regional date or currency format for AI-generated pulse summaries. Applies organization-wide in Chartcastr.
## Overview
The AI Summary Locale setting determines the language, tone, and formatting (such as date and currency formats) used by the AI when generating your pulse summaries.
While the dropdown offers a curated list of common locales, the AI can communicate in most languages. English tends to produce the best results, but the AI will do its best to return summaries and chat responses in whichever language you specify.
## Configuration
**Organization Setting**: This configuration is applied across your entire organization and affects all team members.
You can update the AI Language and regional formats in your organization settings.
1. Go to [Settings → Organisation Settings](https://chartcastr.com/admin/settings?highlight=ai-language).
2. Locate the **AI Language** option.
3. Select your desired locale from the supported list (e.g., English (US), English (UK), Spanish, etc.).
4. Click **Save Changes**.
## Impact
This setting affects:
* The language of the AI summary text.
* Numerical formatting (e.g., use of commas vs. periods).
* Currency symbols if inferred from the data.
# Pulse thread cross-linking
Source: https://docs.chartcastr.com/admin/settings/pulse-thread-linking
Automatically link consecutive pulse deliveries in Slack threads so your team can navigate forward and backward through data history.
## Overview
Pulse Thread Cross-Linking allows you to maintain continuity in your Slack channels by linking consecutive pulse deliveries together.
## How it Works
When enabled, Chartcastr will automatically:
1. Add a link to the **previous** pulse in the current pulse's thread.
2. Add a link to the **next** pulse in the previous pulse's thread once it is delivered.
This creates a navigable history of your data directly within Slack.
## Configuration
**Organization Setting**: This configuration is applied across your entire organization and affects all team members.
You can configure Pulse Thread Cross-Linking in your organization settings.
1. Go to [Settings → Organisation Settings](https://chartcastr.com/admin/settings?highlight=pulse-thread-linking).
2. Find the **Pulse Thread Cross-Linking** section.
3. Select your preferred mode (Both Directions, Backward Only, Forward Only, or Disabled).
# Schedule timezone
Source: https://docs.chartcastr.com/admin/settings/timezone
Set the timezone that controls when pulse schedules fire across your Chartcastr organization. Defaults to auto-detected timezone or UTC.
## Overview
The Schedule Timezone setting determines how all pulse schedule times are interpreted. For example, if you set your schedule to "9 AM daily" and your timezone is set to `America/New_York`, pulses will fire at 9 AM Eastern Time.
## Default
When your organisation is first created, Chartcastr will try its best to discover your preferred timezone automatically. We recommend double-checking that it was detected correctly in your [Organisation Settings](/admin/settings). If we couldn't determine it, schedules will default to **UTC**.
## Configuration
**Organization Setting**: This configuration is applied across your entire organization and affects all connections and team members.
1. Go to [Settings → Organisation Settings](https://chartcastr.com/admin/settings).
2. Locate the **Schedule Timezone** section.
3. Search for and select your desired timezone (e.g., `America/New_York`, `Europe/London`).
The change takes effect immediately for all future scheduled pulses.
## Impact
This setting affects:
* When scheduled pulses fire (e.g. "9 AM daily" is interpreted in the selected timezone).
* All connections across the organisation use the same timezone.
* Existing schedules are not modified — only the timezone interpretation changes.
# Source groups
Source: https://docs.chartcastr.com/admin/sources/source-groups
Organize related data sources into logical groups for shared AI analysis, group-level summaries, and unified external context in Chartcastr.
## Overview
Source Groups are a powerful way to organize your individual data sources into logical buckets. Instead of managing dozens of independent sources, you can group related sources (e.g., "Main Marketing KPIs", "Sales Pipeline", "Product Health") under a single label.
## Why Use Source Groups?
Keep your workspace clean and organized by categorizing sources into relevant business areas.
Providing the AI with the group context allows it to understand how disparate data points relate to each other.
Source groups can have their own summaries, helping you track high-level trends across multiple charts.
Assign [External Context](/analysis/context/overview) to a group once instead of to every individual source.
## Managing Source Groups
You can create and manage your Source Groups in the admin settings.
1. Navigate to [Settings](https://chartcastr.com/admin/settings).
2. Click **Manage** on the **Groups** card.
3. Click **+ New Source Group** or edit an existing one.
4. Give your group a name (e.g., "Executive Dashboard") and an optional description.
5. Select the individual sources you want to include in this group.
## AI Benefits
When a pulse belongs to a source that is part of a group:
* **Cross-Source Awareness**: The AI "knows" what other sources are in the same group.
* **Categorization**: Analysis will reflect the group's label, providing clearer context in Slack or Email.
* **Contextual Reasoning**: If Source A and Source B are both in "Marketing Spend", the AI can correlate drops in one with rises in the other more effectively.
## External Context Integration
Assigning a document (like a strategy PDF or a Glossary) to a Source Group means that **every source** in that group inherits that context. This is the most efficient way to provide business logic to related datasets.
Read more about [External Context](/analysis/context/overview).
# Agency billing
Source: https://docs.chartcastr.com/agencies/billing
How billing works for agencies: a flat platform fee plus a per-active-client charge, billed monthly to the parent agency org.
## Two-line pricing
Agency billing has two components, both invoiced monthly to the **parent agency org**:
1. **Platform fee** — \$380/mo flat, on the parent's Clerk subscription. Unlocks the agency multi-workspace surface (sidebar, dashboard, cross-client switching, the agency dashboard).
2. **Per-active-client charge** — pay only for workspaces you actually use. Each client workspace is on one of three billing tiers:
| Tier | Rate / active client / mo | Use for |
| ---------- | ------------------------- | ---------------------------------------- |
| Starter | \$20 | Light usage, single source, fewer pulses |
| Pro | \$40 | Default — most paying clients |
| Enterprise | Custom | High-volume, custom integrations, SLA |
The variable line is metered: you're billed for the days a workspace was active in the month. Pause a workspace and billing stops immediately.
```
Parent agency → Stripe customer
├─ Clerk subscription: $380 platform fee (flat)
└─ Metered subscription: per-active-client (variable)
```
You'll see one Stripe invoice each billing cycle covering both lines, regardless of how many client workspaces you have.
## Active vs. paused
A child workspace is "active" for a billing day when it's:
* attached to your agency (not [detached](/agencies/managing-clients#detaching-a-client)), and
* not paused (Organization is `active`)
Paused workspaces stop billing immediately and their pulses don't fire. Unpause anytime — billing resumes on the next daily snapshot. Only agency admins (and Chartcastr staff) can pause or unpause a workspace from the agency dashboard.
## What children get
Each child workspace receives the **Pro-tier** feature set regardless of which billing tier you put them on (the tier is purely a pricing knob, not a feature gate):
* Unlimited sources
* Unlimited pulses per month
* Unlimited Slack channel connections (+ Slack Connect)
* Email & Google Chat destinations
* AI summaries, AI chat (100 messages/day), follow-ups
* All premium integrations (Shopify, Xero, Meta Ads, Google Ads, HubSpot, etc.)
Each workspace gets these limits **independently** — heavy usage in one client doesn't starve another.
## Choosing a child billing tier
You assign a tier from the **Settings → Agency** dashboard, in the workspace row. Changing the tier takes effect on the next daily billing snapshot — there's no proration noise mid-day.
## What the agency parent gets
Your parent agency org is itself a Pro-equivalent workspace — useful for hosting your own internal pulses (e.g. "new MRR this week" or "client retention overview"). Use it for cross-client rollups or for client-acquisition reporting.
## Switching plans
Only **admins on the parent agency org** can change the platform plan or pause/unpause client workspaces. Open **Settings → Organization → Billing** on the parent org to manage the \$380 platform subscription. Child workspaces see a "Billing managed by \{your agency}" notice in their Billing tab.
## Detaching a workspace
When you [detach](/agencies/managing-clients#detaching-a-client) a child workspace, it becomes a standalone Chartcastr org on the **free tier**. The client retains access to their data; they can upgrade independently after that. Detached workspaces stop counting toward your variable line on the next billing snapshot.
## What if I cancel my Agency plan?
If your Agency subscription lapses, the metered variable line is cancelled and every child workspace automatically reverts to free-tier limits (they keep their data but lose Pro features). Re-subscribing restores them in seconds.
## Custom pricing
Volume discounts, agency-specific deals, and non-list per-child rates are handled via Stripe customer-level discounts — no code or plan-slug changes needed. [Reach out](/agencies#contact) for an Enterprise quote.
# Agency limits
Source: https://docs.chartcastr.com/agencies/limits
Per-workspace and per-agency limits on the Agency plan.
## Workspace count
The Agency plan supports **unlimited client workspaces**. Add as many clients as you need — billing scales per active workspace (see [Billing](./billing)).
## Per-workspace limits
Each child workspace (and your parent agency org) gets the **Pro-tier** limits:
| Resource | Limit per workspace |
| -------------------------- | ------------------- |
| Active sources | Unlimited |
| Pulses per month | Unlimited |
| Slack channel connections | Unlimited |
| Slack Connect destinations | Available |
| Email destinations | Unlimited |
| AI chat messages | 100 / day |
| AI follow-ups per pulse | Unlimited |
| Active streams | Unlimited |
| Stream events / month | Unlimited |
| AI summaries / month | Unlimited |
These limits are **independent per workspace** — heavy usage in one client doesn't consume another's allowance.
## Pausing workspaces
Don't want to pay for a workspace this month? Pause it from the agency dashboard. A paused workspace stops billing immediately (variable charge) and its pulses don't fire. You can unpause anytime; existing data and configuration are preserved.
Only agency admins and Chartcastr staff can pause/unpause workspaces.
## Member limits
There is no agency-level cap on members. Each workspace's member count is governed by Clerk org limits (effectively unlimited for paid plans).
## Hitting a per-workspace limit
Workspaces enforce limits at the source/connection/pulse level — you'll see a clear error in the UI when an action would exceed a workspace's limit. The agency dashboard surfaces aggregate usage so you can spot which workspace is hot.
## Enterprise
If your agency needs:
* Custom per-workspace pricing or volume discounts
* SLA / dedicated support
* SSO / SAML
* Custom integrations
* Audit log access
…upgrade to **Enterprise** — [reach out](/agencies#contact).
# Managing client workspaces
Source: https://docs.chartcastr.com/agencies/managing-clients
Create, switch between, request access to, and detach client workspaces from your agency.
The **agency dashboard** at [/admin/agency](https://chartcastr.com/admin/agency) is the control surface for every client workspace under your agency parent. Anything beyond data ingestion (sources, connections, pulses) lives inside the child workspace itself — switch in to manage it.
## Creating a client
Click **Create client** on the agency dashboard. You'll be asked for:
* **Client name** — shown in the sidebar switcher and on every chart delivery.
* **Slug** (optional) — URL identifier. Lowercase letters, numbers, dashes only. Auto-generated from the name if omitted.
The new workspace appears immediately in the sidebar's **Agency** group. You're auto-added as **admin** of the new workspace.
## Switching between workspaces
Two ways:
1. **Sidebar Agency group** — quick-switch entries for every workspace you're a member of. One click to jump in.
2. **Org switcher in the sidebar footer** — Clerk's full org switcher (every workspace you belong to, including ones outside the agency).
Switching clears all cached data and reloads scoped to the new workspace — there's no risk of leaking data across clients.
## Requesting access to a workspace
By default, only the **agency admin who created** a workspace is added to it. Other agency admins must self-invite from the agency dashboard:
1. On [/admin/agency](https://chartcastr.com/admin/agency), find the workspace.
2. Click **Get access** (visible only if you're not already a member).
3. You're added as an admin via Clerk. The workspace now shows up in your sidebar.
This explicit access model gives you a clean audit trail of which agency members have touched which client.
If you'd prefer auto-mirroring (every agency admin in every client workspace), [contact support](mailto:hi@chartcastr.com) — we can flip a flag per-account.
## Inviting a client to their workspace
Inside the child workspace, open **Settings → Organization → Members** and use Clerk's invite flow. The client sees only their own workspace, with no view of your agency or other clients.
## Detaching a client
If a client wants to take their reporting in-house, you can detach the workspace:
1. On [/admin/agency](https://chartcastr.com/admin/agency), find the workspace.
2. Click the unlink icon, then **Detach** in the confirm dialog.
What happens:
* The workspace becomes a **standalone** Chartcastr org on the **free tier**.
* All members (including your agency admins) keep their access.
* The workspace can upgrade independently to Starter/Pro from there.
* It no longer counts against your agency child-workspace cap.
You can re-attach a detached workspace by contacting support — automated re-attach is on the roadmap.
## Deleting a workspace
Open the workspace itself, then **Settings → Organization → General → Delete**. Standard Clerk flow.
You **cannot delete the parent agency org** while it has any child workspaces. Detach or delete all clients first.
## Cross-client data isolation
Every database query, GraphQL resolver, and storage path is scoped to the active workspace's organization id. There is no "see everything across clients" view by design — for cross-client analytics, run a pulse in your **parent agency** workspace against your own metrics.
# Agency overview
Source: https://docs.chartcastr.com/agencies/overview
How agencies use Chartcastr to manage multiple client workspaces from a single account, with one invoice and one team.
Chartcastr Agency is for teams that deliver reporting to **multiple end-clients**. Instead of juggling separate accounts (and separate invoices) per client, you operate a single **parent agency org** that owns **child client workspaces**.
## The model
```
Your Agency (parent — billing lives here)
├─ Acme Co. (child workspace)
├─ Globex Corp. (child workspace)
└─ Initech LLC (child workspace)
```
* **Billing only flows to the parent.** One invoice covers every client workspace.
* **Children inherit the parent's plan.** Each child gets the full Pro-tier feature set (unlimited sources, unlimited pulses, AI features, Slack Connect, etc.).
* **Up to 10 client workspaces** per agency on the default Agency plan. Larger agencies — [get in touch](/agencies#contact).
* **Workspaces are isolated.** Data, members, and connections don't cross between clients. Switching workspaces is a single click in the sidebar.
* **Explicit access.** Agency admins aren't auto-added to every client workspace — they request access per-workspace, or are invited directly. This keeps the audit trail clean.
## When this is the right fit
* You build dashboards or reports for clients in **Slack, email, or Google Chat**.
* You manage 3+ clients and want **one invoice instead of N**.
* You want each client's **data, AI summaries, and connections** to live in a workspace that's clearly theirs (so you can hand it over later if they bring reporting in-house).
## What to read next
* [Setting up your agency](/agencies/setup)
* [Billing & limits](/agencies/billing)
* [Managing client workspaces](/agencies/managing-clients)
# Setting up your agency
Source: https://docs.chartcastr.com/agencies/setup
Step-by-step: subscribe to the Agency plan, create client workspaces, and invite teammates.
This guide walks through getting your agency org and your first client workspace running.
## 1. Subscribe to the Agency plan
Create your Chartcastr account at [chartcastr.com/sign-up](https://chartcastr.com/sign-up) (or sign in if you already have one). This first organization becomes your **parent agency org** — name it after your agency (e.g. "BigRock Reports").
From the sidebar, click **Upgrade** and pick the **Agency** plan. Billing is monthly or annual.
If you don't see the Agency tier in the upgrade flow, [contact us](mailto:hi@chartcastr.com) — we'll provision it for your account.
After checkout, the sidebar shows a new **Agency** group at the top with a link to **Agency home**.
## 2. Create your first client workspace
Click **Agency home** in the sidebar, or visit [/admin/agency](https://chartcastr.com/admin/agency).
Click **Create client**. Enter the client's name (e.g. "Acme Co.") and optionally a slug. The slug becomes the workspace's URL identifier (lowercase letters, numbers, dashes only).
You're automatically added to the new workspace as an admin. The sidebar now shows it as a quick-switch entry. Click to switch in — the dashboard, sources, connections, and destinations are now scoped to that client.
From the child workspace, open **Settings → Organization → Members** to invite the client's stakeholders. They'll see only their workspace.
## 3. Invite teammates to your agency
Open **Settings → Organization → Members** on the **parent agency org** (not a child workspace) to invite your fellow agency admins. Teammates added to the parent **don't** automatically get access to every client workspace — they request access per-workspace from the agency dashboard, which keeps your client audit trail clean.
## Next steps
* [Billing & limits](/agencies/billing)
* [Managing client workspaces](/agencies/managing-clients)
# The /admin/briefings page
Source: https://docs.chartcastr.com/analysis/briefings/admin-page
A short tour of the briefings list, composer, settings, and snapshot history pages inside Chartcastr.
The **Briefings** entry in the sidebar takes you to your briefings list. Each briefing has its own composer, settings, and snapshot history.
## Pages
| Page | What it's for |
| ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| **List** — `/admin/briefings` | All your briefings as a card grid, with status pills (`Up to date`, `Unsaved changes`, `Regenerating`, `Failed`) and a button to create a new one. |
| **Composer** — `/admin/briefings/[id]` | Where you compose a briefing: edit the name and description, add rows and items, and press **Save** to regenerate the AI commentary. |
| **Settings** — `/admin/briefings/[id]/settings` | Pick a [destination](/integrations/destinations), set the monthly delivery day and time, and toggle the briefing active or paused. |
| **Snapshots** — `/admin/briefings/[id]/snapshots` | A history of past PDF runs, each with a download link and a frozen view of the briefing as it was delivered. |
## Composer at a glance
The composer has three areas:
* **Header** — name, description, **Save** and **Send Snapshot** buttons.
* **Overall review** — the read-only AI synthesis sitting above the rows.
* **Row list** — each row card shows its title, items, and per-row commentary, plus reorder controls and an "Add item" picker.
A footer reminds you when there are unsaved changes. **Send Snapshot** is disabled while there are unsaved changes, while a save is regenerating, or while this month's snapshot has already been delivered.
## Related
What a briefing is and the plan limits that apply.
What happens when you press Save.
# Overall review & AI commentary
Source: https://docs.chartcastr.com/analysis/briefings/overall-review
How Chartcastr generates the page-level overall summary, the per-row commentary, and the AI titles that sit above and inside a briefing.
A briefing has three layers of AI text. Each layer is intentionally narrow in scope so prompt cost stays predictable and the results are easy to reason about.
## The three AI layers
| Layer | Where it lives | Inputs | Cost shape |
| ------------------ | ---------------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------- |
| **AI titles** | `Briefing.aiTitle` + `BriefingRow.aiTitle` | Briefing description, row items, item summaries | Single batched Haiku call, \~500–1,000 input / \~150 output tokens. |
| **Row commentary** | `BriefingRowContent.aiCommentaryShort/Long + aiHighlights` | Just the items inside that row + their latest Pulse summary | One call per row, bounded concurrency (3 in flight). |
| **Overall review** | `BriefingContent.aiSummaryShort/Long + aiHighlights` | The completed row commentaries + each item's short summary | One call per save, after all rows are done. |
## Overall review (the "big picture")
The Overall Review sits at the top of the composer and on Page 2 of the PDF. It synthesises **across rows** — calling out themes that show up in multiple places, contradictions between rows, and what the user should pay attention to.
It is regenerated **on every save** — there is no skip path. Even if every row was reused from cache, the overall summary still runs because (a) it depends on the row outputs, which may have shifted in tone, and (b) it's a single small call, so the savings would be marginal.
The model gets:
* The briefing name and description
* For each row: title, the long commentary, the highlights
* For each item across all rows: the short summary
It produces:
* `aiSummaryShort` — a 2-sentence executive summary
* `aiSummaryLong` — the body of the "Big Picture" page (4–8 sentences)
* `aiHighlights` — 2–4 bullet points
The overall review is text-in / text-out — no images. Row commentary is also text-only in v1. The only place chart images are read by the AI is at the per-source Pulse layer, before the briefing ever sees them.
## Row commentary
Each row's `aiCommentaryLong` is the analyst-style text shown on that row's card in the composer and under each row's "Cross-analysis" heading in the PDF. It synthesises **just** the items inside that row — there's no leakage from other rows.
Row commentary uses a hash-based skip: if the row's items, their Pulse content IDs, and the row title haven't changed since the last successful run, the prior commentary is reused without an LLM call. See [Save & commit](/analysis/briefings/save-and-commit) for the full hash logic.
## AI titles
Both `Briefing.aiTitle` and every `BriefingRow.aiTitle` regenerate in a single batched call to Haiku. The call is **skipped entirely** when:
* A `aiTitleInputsHash` matches the freshly computed hash, AND
* Both the briefing and every row already have a user-set title (nothing to fill in).
The title prompt is told which titles are locked (`nameLockedByUser` / `titleLockedByUser`) and emits `null` for those — the composer keeps your typed title and never overwrites it.
### Reset to AI title
If you typed a title and later want the AI version back, the row card and briefing header both expose a **Reset to AI title** action. This clears `nameLockedByUser` (or `titleLockedByUser`), and the next save regenerates the AI title.
## What you see in the composer
```
┌───────────────────────────────────────────────────────────┐
│ Briefing name (yours, or AI) [Save] [Send] │
│ description │
├───────────────────────────────────────────────────────────┤
│ Overall review (read-only AI text + highlights) │
│ "Regenerating…" while a save is in flight │
├───────────────────────────────────────────────────────────┤
│ Row 1 — "Acquisition" (your title, or AI) │
│ [item] [item] [item] [+ Add item] │
│ Cross-analysis: row commentary + highlights │
├───────────────────────────────────────────────────────────┤
│ Row 2 — … │
└───────────────────────────────────────────────────────────┘
```
The overall review and per-row commentary are read-only — there's no human override on AI commentary text. If you want to steer the analysis, the lever is the briefing **description**: a one-paragraph framing that the AI receives at every layer and uses to prioritise what to call out.
# Briefings overview
Source: https://docs.chartcastr.com/analysis/briefings/overview
Briefings stitch multiple sources and source groups into a single AI-synthesised dashboard, with a once-a-month PDF snapshot delivered to your destination.
A **Briefing** is a cross-source AI synthesis surface. Where a Pulse delivers analysis for one source (or one source group) at a time, a Briefing combines many of them into a single big-picture view that runs **once per calendar month** and lands as a PDF in your destination.
Briefings are available on **any paid plan** (Starter, Pro, Enterprise). Limits vary by tier — see [Plan limits](#plan-limits) below.
## What a Briefing is made of
| Concept | Description |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| **Briefing** | The top-level container. Has a name, description, optional cover emoji + colour, a destination, and a monthly schedule. |
| **Row** | A horizontal grouping of items the AI cross-analyses together. Think "Acquisition", "Retention", "Finance". |
| **Row item** | One source or source group inside a row. Pulls in the latest chart image + AI summary from that source's most recent Pulse. |
| **Overall review** | The page-level AI synthesis sitting above the rows — the "big picture" across every row. |
| **Snapshot** | A frozen, versioned PDF of the briefing at a point in time. One snapshot per calendar month. |
## How it works at a glance
1. You compose the briefing in `/admin/briefings/[id]` — add rows, drop sources or source groups into each row, give them titles.
2. You press **Save** — the server runs a fresh AI pass: per-row commentary, then an overall summary across all rows.
3. Once committed, you can **send a snapshot** — Chartcastr renders a multi-page PDF and delivers it to your chosen destination.
4. A monthly cron fires the same flow automatically on your scheduled day-of-month + time.
## Pages in this section
Playbooks for the four jobs Briefings nail first — client reporting, board prep, pitch prep, all-hands.
How rows and row items work, what counts toward your per-row item budget, and how source groups expand inside a row.
The page-level AI summary, per-row commentary, and how AI titles are generated.
The explicit save model, AI regeneration, and why edits are blocked while a commit is in flight.
Monthly PDF snapshots, the once-per-calendar-month throttle, and destination delivery.
A walkthrough of the list view, composer, settings, and snapshot history pages.
## Plan limits
Limits scale with your tier. Active means non-archived.
| Limit | Free | Starter | Pro | Enterprise |
| ----------------- | ---- | ------- | --- | ---------- |
| Active briefings | 0 | 2 | 5 | unlimited |
| Rows per briefing | 0 | 4 | 8 | unlimited |
| Items per row | 0 | 4 | 6 | unlimited |
A source group counts toward the **items-per-row** budget by the number of sources inside it, not as one item — this matches how the briefing renders the group's child charts side-by-side.
## Why Briefings vs. Pulses?
Pulses are the heartbeat — frequent, single-source, optimised for "is anything moving?". Briefings are the monthly retrospective — wide-angle, cross-source, optimised for "what's the overall picture and what should we do about it?". They share data (Briefings reuse the latest Pulse output for each item) but solve different jobs.
# Briefing rows
Source: https://docs.chartcastr.com/analysis/briefings/rows
How briefing rows and row items work — what counts toward your per-row item budget, how source groups expand, and how rows are reordered.
Rows are the unit of cross-source AI analysis inside a briefing. Each row holds one or more **row items** (a Source or a Source Group), and the AI writes commentary that synthesises just the items in that row. The page-level [Overall review](/analysis/briefings/overall-review) then synthesises across all rows.
## Row items
A row item is a pointer to an existing thing in your workspace:
| Kind | What gets pulled in |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Source** | The latest chart image + AI short / long summary from that source's most recent Pulse run. |
| **Source group** | The latest cross-source meta-analysis run for that group, including its representative chart and the per-child summaries. |
Briefings never re-fetch data themselves. They reuse whatever the latest Pulse / Source-group analysis produced — so freshness depends on your Pulse cadence. If a source hasn't run recently, the row item shows "no recent data" and the AI commentary notes the gap.
## Item budget per row
Each plan caps how many items can sit inside a single row:
| Tier | Items per row |
| ---------- | ------------- |
| Free | 0 |
| Starter | 4 |
| Pro | 6 |
| Enterprise | unlimited |
### How source groups count
A source group does **not** count as one item — it counts as the **number of sources inside it**. The composer expands the group's child charts visually, so a group with 3 sources fills 3 of your row's item slots.
If a source group is too big to fit into a row, the composer surfaces an inline "this would exceed your row's item budget" message before you confirm. Either split the group or move some items to another row.
## Row titles
Rows have two titles:
* **`title`** — what you typed. When set, this is what the user sees and it stays put.
* **`aiTitle`** — a 2–5 word title generated by Haiku on every save, based on the row's items. Shown when `title` is empty.
The composer falls back to `title ?? aiTitle ?? "Untitled row"`. If you've manually edited the title, the row is locked (`titleLockedByUser`) and the AI no longer overwrites it. You can choose **Reset to AI title** from the row menu to release the lock.
The same pattern applies at the briefing level — `Briefing.name` vs. `Briefing.aiTitle`. Both regenerate in a single batched AI call on save.
## Reordering
Rows and items reorder via arrow-up / arrow-down buttons on each card. There's no drag-and-drop in v1 — given the small numbers (8 rows × 6 items), the keyboard / click affordance was the simpler ship.
Reordering only changes the row's `position` field — it does **not** retrigger AI analysis. Order only matters for how the briefing renders (composer, PDF) and for the cache hash that decides whether a row needs re-analysis on next save.
## When a row's analysis is reused
Each row stores an `aiInputsHash` — a hash of its sorted item refs + their latest Pulse content IDs + the row title. On save, the orchestrator recomputes the hash:
* **Hash matches** → the prior row commentary is reused. No LLM call, no token spend. The row gets a new `BriefingRowContent` row pointing back at the prior one via `aiReusedFromBriefingContentId`.
* **Hash differs** → the row is re-analysed from scratch.
This is why adding a brand-new row is cheap (only that row runs), and why renaming a row title or moving an item between rows triggers a re-analysis on the affected rows.
## Failure handling
If a single row's AI commentary fails, the run does **not** abort. The failed row's `BriefingRowContent` is written with `aiError` set, a warning is appended to the run, and the orchestrator continues. The run is marked `SUCCESS` as long as at least one row produced commentary AND the overall summary call succeeded.
The composer surfaces failed rows with a "row failed — retry" affordance on the snapshot detail page.
# Save & commit
Source: https://docs.chartcastr.com/analysis/briefings/save-and-commit
Why briefings use an explicit save model, how AI regeneration works on commit, and why row edits are blocked while a commit is in flight.
Briefings use an **explicit save** model. Editing rows, adding items, or renaming things only mutates the draft state on the server — they do **not** call the AI. The AI work happens in one batch when you press **Save**.
## Why explicit save?
The alternative — debounced auto-regen — was rejected because:
* Each save runs N row-analysis calls + 1 overall summary call. Auto-regen on every keystroke would burn tokens on edits the user is still composing.
* Briefings are monthly. There's no "live dashboard" UX expectation; a deliberate commit step matches the cadence.
* It makes the cost story predictable: one bounded burst per save, no surprises.
## What happens on save
When you press Save, the client calls `commitAndRegenerateBriefing(id)`. The server:
1. Creates a new `BriefingContent` row with `status = IN_PROGRESS`, `triggerType = MANUAL`.
2. Snapshots the briefing's row + item composition into `BriefingContent.briefingSnapshot` (so the run is reproducible even if rows change later).
3. **Title pre-step:** if the briefing or any row has unlocked titles AND the title-input hash has changed, makes one batched Haiku call for all titles at once.
4. **Per-row commentary** in parallel (bounded to 3 in flight):
* Recompute the row's `aiInputsHash`.
* If it matches the row's existing hash, reuse the prior commentary (no LLM call).
* Otherwise, fetch the row's items' latest Pulse output and call `generateBriefingRowAnalysis`.
5. **Overall review:** after all rows complete, run `generateBriefingOverallSummary` over the row outputs + item short summaries.
6. Set `BriefingContent.status = SUCCESS`, write `aggregateTokenUsage`, end the run.
The mutation returns immediately with the new `BriefingContent.id`. The composer polls `getBriefing` every 2 seconds until status leaves `IN_PROGRESS`.
No PDF is rendered and no destination is contacted on a save. PDF and delivery only run on a [snapshot](/analysis/briefings/snapshots).
## Why row edits are blocked while a commit is in flight
While a `BriefingContent` is `IN_PROGRESS` for a briefing, every `mutateBriefingRow` call is rejected with `BRIEFING_COMMIT_IN_PROGRESS`. The composer disables the row-edit affordances (drag handles, item picker, title fields) for the same reason.
The lock exists because:
* The snapshot was frozen at commit start. Downstream row analyses run against that frozen view.
* Allowing edits during the run would silently invalidate the row hashes and produce stale-on-arrival results.
* A typical commit takes \<30 seconds. A short read-only window is a clearer UX than letting writes race.
The lock is **per-briefing only** — other briefings remain freely editable, and any unrelated mutation (sources, connections, settings) is unaffected.
### Stale runs
If a commit somehow gets stuck (server crash, network partition), a 30-minute sweeper transitions abandoned `IN_PROGRESS` runs to `FAILED` so the briefing isn't permanently locked.
## The `needsCommit` flag
`Briefing.needsCommit` is the single source of truth for "this briefing has uncommitted changes". The server computes it from row-level `aiInputsHash` mismatches — **don't** derive it on the client from `updatedAt` timestamps. The composer's "Unsaved changes" badge reads this field directly.
`Send Snapshot` is disabled when:
* `needsCommit === true` — there's nothing fresh to send,
* `isCommitting === true` — a save is in flight, or
* The monthly throttle says next-eligible-date is in the future.
## What changes trigger AI work?
| Edit | Title regen? | Row commentary regen? | Overall review regen? |
| -------------------------- | ------------------------- | --------------------- | --------------------- |
| Add a row | ✅ (new row needs a title) | ✅ (new row only) | ✅ (always) |
| Add an item to a row | ✅ (row title may shift) | ✅ (just that row) | ✅ |
| Remove an item | ✅ | ✅ (just that row) | ✅ |
| Reorder items within a row | ❌ | ❌ | ✅ |
| Reorder rows | ❌ | ❌ | ✅ |
| Type a row title | ❌ | ❌ | ✅ |
| Edit briefing description | ✅ | ❌ | ✅ |
| Reset to AI title | ✅ | ❌ | ✅ |
The overall review **always** runs because it's a single small call and depends on every row's output.
# Snapshots & delivery
Source: https://docs.chartcastr.com/analysis/briefings/snapshots
How Chartcastr renders monthly briefing PDFs, the once-per-calendar-month throttle, and destination delivery.
A **snapshot** is a frozen, multi-page PDF render of your briefing at a point in time, plus the act of delivering it to your destination. Snapshots are throttled to **once per calendar month** per briefing.
## When snapshots run
| Trigger | Source | Throttle? |
| ------------------------ | ----------------------------------------------------------------------------------------------- | --------- |
| Scheduled | The monthly cron, fired by the briefing's connection at the day-of-month + time you configured. | Yes. |
| Manual ("Send Snapshot") | The button in the composer or list page. | Yes. |
| Manual override | Org admins only — bypasses the monthly throttle for support / failed-delivery retries. | No. |
If a scheduled or manual run hits the throttle, the orchestrator writes a `BriefingContent` with `status = UNCHANGED` and `runWarnings = [{ code: 'THROTTLED_MONTHLY' }]`, then exits without calling the AI or rendering a PDF.
"Calendar month" is computed in your **organisation's timezone**, not UTC. A briefing scheduled for the 1st of the month will fire on your local 1st, and `lastSnapshotAt` is compared against the start of that local month.
## Schedule shape
The briefing settings page exposes a structured form, not a cron textarea:
* **Day of month**: 1–28 (avoids the 29/30/31 edge cases).
* **Hour**: 0–23, in your org timezone.
* **Minute**: 0–59.
The server materialises this to a cron expression internally — the UI never sees one.
## What's in the PDF
The PDF is rendered server-side with `@react-pdf/renderer` (Bun-compatible, no headless browser). Layout:
| Page | Contents |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **1 — Cover** | Briefing name, period label (e.g. "April 2026"), generated timestamp, organisation name, description, brand mark. |
| **2 — Big Picture** | The overall review — `aiSummaryLong` body + highlight bullets. Placed up-front. |
| **3+ — Per-row sections** | For each row: title, item grid (chart image + name + short summary, 2 per row), then the cross-analysis commentary + highlights. |
| **Last — Appendix** | Per-item full long summaries (anything that didn't fit above), and a data-freshness table showing each item's `latest.generatedAt` vs. fresh / stale. |
The PDF is uploaded to R2 and linked from `BriefingContent.pdfUrl` so it can be re-downloaded from the snapshot history page even after delivery.
## Delivery
Briefings are delivered to your configured [destination](/integrations/destinations). The cover message includes the briefing name, period label, the overall short summary, and a link to view the snapshot online. The PDF is attached to the message wherever the destination supports attachments; if the file is too large for the destination, Chartcastr falls back to a download link instead.
The deliverable is consistent across destinations — only the wrapping format differs.
## Snapshot history
Every run — successful, throttled, failed — writes a `BriefingContent` row. The `/admin/briefings/[id]/snapshots` page lists them, ordered newest-first. By default the list filters to `status = SUCCESS` and `pdfUrl IS NOT NULL`; toggle to show all.
Each row records:
* Completion date, status, trigger type (Scheduled / Manual)
* Token usage breakdown (titles + rows + overall)
* PDF download link
* A view of the frozen `briefingSnapshot` so the snapshot detail page can re-render the briefing exactly as it was delivered, even if you've since changed the live composition.
## Failure modes
| Code | Cause | What it means |
| ----------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- |
| `THROTTLED_MONTHLY` | A run for the same briefing already completed this calendar month. | Run exits early. No AI, no PDF. Use the admin override to bypass. |
| `BRIEFING_COMMIT_IN_PROGRESS` | A save is already in flight. | Wait for the in-flight run to finish. |
| `PLAN_UPGRADE_REQUIRED` | The org's plan dropped below paid. | Read access still works; mutations and new snapshots are blocked. Existing scheduled connections move to `DEGRADED`. |
A run is `SUCCESS` when at least one row produced commentary AND the overall summary call succeeded. A row that failed individually is recorded with `aiError` set and surfaces on the snapshot detail page as a per-row "retry" affordance — it does not block the rest of the briefing from being delivered.
# Briefings use cases
Source: https://docs.chartcastr.com/analysis/briefings/use-cases
How teams actually use Chartcastr Briefings — accelerated client reporting, board deck prep, pitch deck prep, and the monthly all-hands recap.
A [Briefing](/analysis/briefings/overview) is a single PDF that synthesises across every source you care about, with cross-source AI commentary and a page-level overall review, delivered on a once-per-calendar-month cadence.
That shape fits a handful of jobs particularly well. Each section below has a short summary plus a deeper write-up on the [Chartcastr blog](https://chartcastr.com/blog) — half release note, half playbook for the use case.
## Accelerated client reporting
For agencies that build the same monthly client report by hand. One Briefing per client, rows for each theme (Acquisition, Retention, Finance, etc.), AI commentary already written, PDF auto-delivered on the 1st.
The before / after is stark: 4–6 hours per client per month becomes a one-time setup. Reporting that lagged the data by a week now fires automatically when the month closes.
Accelerated Client Reporting with Chartcastr Briefings — agency setup walkthrough, the time-cost math, and where to start.
## Board deck asset prep
For founders and finance leads who rebuild the appendix every board cycle. The Briefing becomes the living appendix — Finance, Growth, Retention, Acquisition, Product as rows — and the [overall review](/analysis/briefings/overall-review) becomes the first draft of the CEO's "what happened this month" page.
Stable structure, fresh data, monthly cadence, polished output. That's exactly what a board deck appendix needs.
Stop Rebuilding the Board Deck — how Briefings hold up across 12 board cycles, and what the PDF looks like when it lands in a board pack.
## Pitch deck prep
For founders who are mid-fundraise and tired of patching stale charts into the deck. A "metrics for investors" Briefing lives next to the deck — not inside it. The deck stays deliberate; the Briefing carries the freshness load.
Trigger a manual snapshot before any investor call. The cover summary and overall review give the investor enough context to come prepared with sharper questions.
Pitch Deck Prep: A Briefing for Every Investor Conversation — the deck-vs-metrics-pack split, the before-call workflow, and what investors actually want.
## All-hands progress reports
For leadership teams that assemble the monthly all-hands recap from scratch every cycle. One row per function — Product, Go-to-market, Customer Success, Engineering, People — and the AI cross-analysis surfaces the themes leadership would otherwise hunt for across six different dashboards.
The PDF lands the morning of the all-hands. Leadership reads it once, edits the framing, walks into the meeting an hour later.
The All-Hands Progress Report, Written for You — the section structure, the morning-of workflow, and what leadership keeps doing vs. stops doing.
## Pick the one that fits and start there
Don't roll Briefings out across every workflow at once. Pick one job — the one that's most painful right now — and build a single briefing for it. Run a manual snapshot before the next reporting cycle. Compare the output to what you'd have built by hand.
By cycle two you'll know the shape, and the other use cases will feel like obvious next steps.
What a briefing is, plan limits, and how rows and items compose.
Tour of the list, composer, settings, and snapshot history.
# Chat actions
Source: https://docs.chartcastr.com/analysis/chat/actions
Create connections, manage pulses, update source groups, and edit workspace configuration using natural language commands in Chartcastr AI chat.
## Overview
The Chartcastr AI Chat isn't just for asking questions—it's a powerful tool for taking action. You can manage your connections, pulses, and configuration directly through natural language.
## Key Actions
### Creating Connections
You can set up new connections by simply describing what you want to achieve.
* *"Set up a new Google Sheets connection for my Marketing dashboard"*
* *"Link the Sales tab from this spreadsheet to the #revenue Slack channel"*
### Managing Pulses
Interact with your existing pulses without navigating through the dashboard.
* *"Show me my latest pulses"*
* *"When is the next pulse for the Product team scheduled?"*
* *"Disable the Daily Revenue pulse for the weekend"*
### Bulk Updates with Source Groups
Manage your sources at scale using Chat, including context assignments.
* *"Group all my Shopify sources into a new 'Ecommerce' group"*
* *"Add the 'Q1 Strategy' document as [External Context](/analysis/context/overview) to all sources in the Marketing group"*
* *"Update all sources in the Sales group to use the same analysis template"*
### Configuration Edits
Quickly modify your workspace settings and context.
* *"Update the [User Notes](/analysis/context/user-notes) for my Slack Revenue connection to mention the Q4 promotion"*
* *"Invite [sarah@company.com](mailto:sarah@company.com) to this workspace as an admin"*
* *"Change the reporting timezone to EST for all my pulses"*
## Workflow Automation
Chat can help you stitch together complex tasks into simple commands. For example:
*"Create a new source group for all European sales data and set up a weekly Slack pulse to #emea-growth every Friday at 9am."*
## Feedback Loop
When you ask Chat to perform an action, it will usually provide a confirmation or a draft of the changes. You can review and refine the action before it's finalized.
* *"Looks good, go ahead"*
* *"Wait, change the delivery time to 10am instead"*
# Conversational data analysis
Source: https://docs.chartcastr.com/analysis/chat/analysis
Ask complex questions about your data in Chartcastr AI chat. The assistant uses external context, pulse history, and documents for deeper insights.
## Overview
Chartcastr AI Chat provides a conversational interface for deep analysis of your data. It goes beyond simple snapshots, allowing you to ask complex questions that leverage the full [Context](/analysis/context/overview) of your workspace.
### Context Discovery
The AI automatically discovers context from your [connected sources and documents](/analysis/context/overview) to make every interaction smarter. It doesn't just look at the numbers; it reads your strategy docs and metric definitions to explain *why* the numbers are changing.
## Context-Aware Analysis
The power of Chat analysis comes from its ability to synthesize multiple information sources:
### Pulse and Connection Data
Chat has direct access to your latest pulse data and connection history.
* *"Why did revenue drop yesterday compared to the same day last week?"*
* *"Which items are currently trending in our inventory?"*
### External Context Integration
If you've linked [External Context](/analysis/context/overview) (like Google Docs or Sheets), Chat incorporates that information into its analysis.
* *"Based on our Q1 Strategy document, how are we tracking against our growth goals?"*
* *"Explain the latest revenue numbers in the context of our pricing update definitions in Sheets."*
### Comparing Data
You can use Chat to compare performance across different sources or time periods.
* *"Compare the conversion rate of our Facebook ads vs Google ads over the last 30 days."*
* *"Show me how the new product launch in London compares to the Manchester launch."*
## Interactive Exploration
Analysis in Chat is iterative. You can start with a broad question and drill down into specific details.
1. **Start Broad**: *"How was our performance last week?"*
2. **Drill Down**: *"Break down that revenue spike by category."*
3. **Analyze Root Cause**: *"Was that increase driven by new customers or existing ones?"*
4. **Get Recommendations**: *"What should we focus on next week to maintain this momentum?"*
## Visualizing Insights
While Chat is primarily text-based, it can help you prepare data for visualization.
* *"Summarize these findings into a list of bullet points for my weekly report."*
* *"Format the revenue comparison as a table."*
## Privacy and Data Security
Chat analysis respects all your existing permissions and data security settings. It only analyzes data that you have explicit access to within the workspace.
# Chat follow-ups in Slack and Teams
Source: https://docs.chartcastr.com/analysis/chat/followups
Tag @chartcastr in a Slack or Teams pulse thread to ask follow-up questions about your charts. Get context-aware answers without leaving the channel.
## Overview
Chat Follow-ups let you ask questions about your charts directly within Slack or Microsoft Teams. By tagging `@chartcastr` in a pulse thread or channel, you can get contextual answers about your data without leaving your conversation.
## How It Works
When you tag `@chartcastr` in a channel where the bot is present, it analyzes the context of your message and provides an intelligent response inline.
### Thread Context
Chartcastr is context-aware. When you tag it within a thread attached to a Pulse notification:
* It knows **which pulse** you're asking about
* It understands **the specific chart data** in that pulse
* It has access to [External Context and User Notes](/analysis/context/overview) linked to that source
* It remembers **the conversation history** in the thread
**Example:**
```
[Chartcastr Pulse in #sales-reports]
📊 Weekly Revenue: $125,000 (+12%)
AI Summary: Revenue exceeded targets driven by enterprise upgrades...
--- Thread ---
You: @chartcastr Which specific customers drove the increase?
Chartcastr: The increase was primarily driven by 3 enterprise
accounts upgrading to annual plans: Acme Corp (+$15K), TechStart
(+$12K), and Global Industries (+$8K). These were all Q4 contract
renewals that moved from monthly to annual billing.
You: @chartcastr How does this compare to last quarter?
Chartcastr: Q4 upgrades are tracking 23% higher than Q3. Last
quarter had 5 major upgrades totaling $28K, while this quarter
already has 8 upgrades totaling $45K with 3 weeks remaining.
```
### Channel Questions
You can also ask general questions in channels where Chartcastr is a member:
```
You: @chartcastr What's our current MRR?
Chartcastr: Your current MRR is $487,500 as of today. This is up
2.3% from last month. The main growth driver has been the new
Starter plan tier which contributed $18K in new revenue.
You: @chartcastr Show me all active pulses
Chartcastr: You have 12 active pulses:
• Weekly Revenue → #exec-reports (Mondays 9am)
• Daily Active Users → #product-team (Daily 8am)
• Campaign Performance → #marketing (Fridays 4pm)
...and 9 more. View all in your dashboard: https://chartcastr.com/admin/pulses
```
## Supported Platforms
Full support for tagging @chartcastr in:
* Pulse threads for contextual follow-ups
* Channels where Chartcastr is a member
* Direct messages to the Chartcastr app
The bot understands thread context and can reference the specific pulse data when replying.
Learn more about setting up Slack
**Coming Soon** — Microsoft Teams follow-up support is in development alongside the Teams integration.
When launched, you'll be able to:
* Tag @chartcastr in Teams channels
* Ask follow-ups in pulse threads
* Get contextual answers about your data
View Teams integration status
## What You Can Ask
### In Pulse Threads
* "What caused this spike?"
* "Break down the top contributors"
* "Which segments performed best?"
* "Show me the underlying data"
* "How does this compare to last week?"
* "What's the MoM trend?"
* "Compare this to Q3 performance"
* "How are we tracking against goal?"
* "Explain what this metric means"
* "Why is this important?"
* "What should we do about this?"
* "Summarize the key takeaways"
* "Who should I notify about this?"
* "Should we schedule a follow-up meeting?"
* "Create a task to investigate the drop"
* "Alert the team if this drops below X"
### General Questions
* "What's the status of \[source/connection]?"
* "Show me my active pulses"
* "When is the next pulse sending?"
* "Help me create a new connection"
* "Why didn't my last pulse send?"
* "What's our \[metric] for \[time period]?"
## Best Practices
When asking about a specific pulse, reply in the pulse thread. The AI automatically knows which chart you're referring to.
Good: "@chartcastr What was our revenue last Tuesday?"
Vague: "@chartcastr show me numbers"
The AI maintains conversation history in threads. You can reference previous answers:
"@chartcastr Expand on that last point about churn"
Request specific formats for better readability:
* "@chartcastr Show this as a table"
* "@chartcastr Give me bullet points"
* "@chartcastr Keep it brief"
## Privacy & Thread Access
* Only users who can see the pulse can tag @chartcastr in the thread
* The bot respects your workspace permissions
* External context is only used if the source has linked documents
* Thread conversations are stored for context but not shared across workspaces
## Limitations
Follow-up messages count toward your AI Chat daily limits based on your plan:
| Plan | Messages Per Day |
| :--------- | :--------------- |
| Free | 2 |
| Starter | 10 |
| Pro | 100 |
| Enterprise | Unlimited |
Chartcastr only responds when tagged. It won't proactively message channels or start conversations.
The AI can only access data and connections within your Chartcastr workspace.
## Troubleshooting
* Ensure @chartcastr is invited to the channel
* Check that the bot is online in your workspace
* Verify you haven't hit your daily message limit
* Try re-inviting the bot if issues persist
* Make sure you're in a pulse thread (not just a regular channel message)
* Be specific about which source or metric you're asking about
* The bot may ask clarifying questions if context is unclear
* The AI can only access sources and connections you have permission to see
* External context documents must be properly linked to the source
* Some historical data may not be available depending on retention settings
## Example Workflows
### Weekly Standup
```
[Monday 9am - Weekly Revenue Pulse in #sales]
You: @chartcastr What's the breakdown by product tier?
Chartcastr: Enterprise: $85K (68%), Pro: $28K (22%), Starter: $12K (10%)
You: @chartcastr Any concerning churn signals?
Chartcastr: No immediate concerns. Churn is at 2.1%, below the 3%
threshold. However, 2 enterprise customers have contracts expiring
this month worth $24K total. I recommend proactive outreach.
You: @chartcastr Draft an alert for the team
Chartcastr: 📋 Draft alert:
"🎯 Weekly Revenue: $125K (+12%)
⚠️ Action needed: 2 enterprise renewals at risk ($24K)
✅ Next steps: Review expiring contracts"
Reply "send" to post this to the channel.
```
### Incident Response
```
[Alert Pulse in #engineering]
📉 Error Rate Spike: 5.2% (normal: <1%)
You: @chartcastr When did this start?
Chartcastr: Error rate began increasing at 14:32 UTC, approximately
45 minutes ago. First spike coincided with deployment #2847.
You: @chartcastr Which endpoints are affected?
Chartcastr: Top 3 affected endpoints:
1. /api/v2/checkout (2.1% error rate)
2. /api/v2/payments (1.8% error rate)
3. /webhooks/stripe (0.9% error rate)
You: @chartcastr Is this related to the payment service issues?
Chartcastr: Based on the error patterns and your linked incident
response doc, this matches the symptoms of the payment gateway
timeout issue. The checkout and payment endpoint errors both
involve 504 gateway timeouts.
```
## Next Steps
Learn how to interact with the bot directly in Slack channels.
Connect Slack to start using follow-ups.
# AI chat overview
Source: https://docs.chartcastr.com/analysis/chat/overview
Explore what Chartcastr AI chat can do — manage automations, analyze data, ask follow-up questions, and take actions using your workspace context.
The Chartcastr AI Chat is an intelligent assistant designed to help you manage your automations, explore your data, and get answers about your workspace. It is context-aware, meaning it understands your connected sources, destinations, and existing automations.
### Smart Analysis through Context
Chat is uniquely powerful because it discovers and leverages your [Context](/analysis/context/overview). When you link Google Docs, Sheets, or add User Notes, the AI assistant reads this background information to provide significantly smarter and more relevant analysis of your data.
Start here to learn about the core capabilities of Chartcastr AI Chat.
Tag @chartcastr in Slack or Teams for contextual follow-up questions about
pulses.
Create connections, manage pulses, and update your configuration through
chat.
Deep-dive into your data, compare sources, and leverage external context.
# Confluence context (coming soon)
Source: https://docs.chartcastr.com/analysis/context/confluence
Planned integration to link Confluence pages as external context for Chartcastr AI analysis. Ideal for technical docs, runbooks, and project specs.
**State**: Coming Soon — Confluence integration is on our roadmap.
## Overview
We are planning to add support for Confluence pages to provide technical and operational context for your data. Ideal for:
* Technical documentation
* Product specifications
* Team documentation
* Project runbooks
## Planned Features
* **Space Integration**: Link entire Confluence spaces or specific pages to Source Groups.
* **Deep Indexing**: AI analysis will leverage your internal documentation to explain data anomalies based on technical specs or project timelines.
* **Automatic Updates**: When you update a Confluence page, Chartcastr will automatically reflect those changes in future pulse analyses.
## Request This Feature
If your team uses Confluence and would benefit from this integration, let us know! User feedback helps us prioritize our roadmap.
Tell us how you'd use Confluence context in your pulses.
# Google Docs as context
Source: https://docs.chartcastr.com/analysis/context/google-docs
Link Google Docs strategy documents, planning memos, and playbooks to your Chartcastr sources so AI summaries reflect your business goals.
## Overview
Extract content from Google Docs and use it to provide business context for your AI analysis.
Ideal for:
* Strategy documents and planning memos
* Project requirements and specifications
* Company playbooks and methodologies
* Quarterly planning documents
## How It Works
1. **Link Documents**: Connect documents from Google Drive to a Source or Source Group.
2. **AI Reads Context**: When generating pulse summaries, the AI reads and incorporates the full text of the linked documents.
3. **Better Insights**: Summaries are more informed by your business goals and strategies.
## Document Limits
Each Source or Source Group can have up to **3 external context documents** linked.
| Plan | Documents per Source/Group |
| :------------- | :---------------------------------------------------------------------------------------- |
| **All Plans** | 3 |
| **Need More?** | [Contact Us](mailto:support@chartcastr.com?subject=External%20Context%20Limit%20Increase) |
Need more than 3 documents per source? Contact us at [support@chartcastr.com](mailto:support@chartcastr.com) to discuss your requirements.
## Linking Google Docs
### From Settings
You can manage all your linked external documents in the Context section of your settings.
1. Go to [Settings](https://chartcastr.com/admin/settings).
2. Click **Manage** on the **Context** card.
3. Use the **External Documents** view to see and manage linked files.
4. Click **Link Context File** to add a new document.
5. Select **Single Source** or **Source Group** as your target.
6. Search and select a document from Google Drive.
7. Click **Link Context File** to save.
### From a Source Page
1. Navigate to a Source's detail page.
2. Find the **External Context Documents** section.
3. Click **+ Add**.
4. Follow the same process as above (Source will be pre-selected).
## Best Practices
Link documents that directly relate to the data being analyzed. A project strategy document works better than a general company overview.
If multiple sources share the same business context (e.g., all marketing metrics), link the document to a Source Group rather than each individual source.
While AI can read long documents, keeping your context documents focused on key facts and strategies will yield the best results in pulse summaries.
## Troubleshooting
Each target (Source or Source Group) can have up to 3 documents. Remove existing documents or contact us for increased limits.
Ensure you've connected your Google account and the document is accessible. Try searching by name or scroll through recent files.
External context is read at the time of pulse generation. Changes to linked documents will be reflected in the next pulse.
# Google Sheets as context
Source: https://docs.chartcastr.com/analysis/context/google-sheets
Connect specific Google Sheets tabs as external context for Chartcastr AI analysis. Perfect for metric definitions, benchmarks, and lookup tables.
## Overview
Connect individual sheet tabs from Google Sheets to your Sources or Source Groups. Perfect for:
* Metric definition spreadsheets
* Lookup tables and reference data
* Historical benchmarks
* Calculated metrics documentation
**Note**: You select a specific sheet tab, not the entire spreadsheet. This keeps the AI focused on relevant information.
## How It Works
1. **Link Documents**: Connect specific sheet tabs from your Google Sheets to a Source or Source Group.
2. **AI Reads Context**: When generating pulse summaries, the AI reads and incorporates the data from these sheets.
3. **Better Insights**: Summaries are more relevant because the AI understands your metrics and reference data.
## Document Limits
Each Source or Source Group can have up to **3 external context documents** linked.
| Plan | Documents per Source/Group |
| :------------- | :---------------------------------------------------------------------------------------- |
| **All Plans** | 3 |
| **Need More?** | [Contact Us](mailto:support@chartcastr.com?subject=External%20Context%20Limit%20Increase) |
Need more than 3 documents per source? Contact us at [support@chartcastr.com](mailto:support@chartcastr.com) to discuss your requirements.
## Linking Google Sheets
### From Settings
You can manage all your linked external documents in the Context section of your settings.
1. Go to [Settings](https://chartcastr.com/admin/settings).
2. Click **Manage** on the **Context** card.
3. Use the **External Documents** view to see and manage linked files.
4. Click **Link Context File** to add a new document.
5. Select **Single Source** or **Source Group** as your target.
6. Search and select a file from Google Drive.
7. Select the specific sheet tab you want to use.
8. Click **Link Context File** to save.
### From a Source Page
1. Navigate to a Source's detail page.
2. Find the **External Context Documents** section.
3. Click **+ Add**.
4. Follow the same process as above (Source will be pre-selected).
## Best Practices
Link documents that directly relate to the data being analyzed. A glossary of metric definitions works better than a general company overview.
If multiple sources share the same business context (e.g., all marketing metrics), link the context document to a Source Group rather than each individual source.
Choose the specific tab that contains relevant definitions or context. This ensures the AI receives focused, pertinent information.
## Troubleshooting
Each target (Source or Source Group) can have up to 3 documents. Remove existing documents or contact us for increased limits.
Ensure you've connected your Google account and the file is accessible. Try searching by name or scroll through recent files.
External context is read at the time of pulse generation. Changes to linked documents will be reflected in the next pulse.
# Granola meeting notes as context
Source: https://docs.chartcastr.com/analysis/context/granola
Link Granola meeting notes to Chartcastr sources so AI pulse summaries correlate metric changes with recent decisions and action items.
**State**: Available on all plans. Requires a Granola **Business** or **Enterprise** plan for API access.
## Overview
Link Granola meeting notes to your Chartcastr Sources to provide meeting context for your automated pulses. This is perfect for:
* Correlating metric changes with recent meetings and decisions
* Adding meeting summaries as context for chart analysis
* Understanding the "why" behind data trends using meeting notes
## How It Works
1. **Connect Granola**: Enter your Granola API key in the Integrations settings.
2. **Link Context**: From any Source details page, click "Add Source Context" and select Granola.
3. **Select Notes**: Browse and select meeting notes to use as context for your charts.
4. **AI Analysis**: Our AI automatically uses the meeting summaries to provide deeper insights into your pulse summaries, connecting your live data to your meeting context.
## Setup
Open the **Granola desktop app**, go to **Settings → API → Create new key**, and generate a key.
Granola offers two key types — either works with Chartcastr:
| Key Type | Scope | Plan Required |
| ---------------------- | ----------------------------------------------------------------------------------- | ----------------------- |
| **Personal API key** | Your own notes, notes shared with you, and notes in private folders shared with you | Business or Enterprise |
| **Enterprise API key** | All notes in the Team space (org-wide, excludes private notes/folders) | Enterprise only (admin) |
**Which key should I use?** Use a **Personal API key** if you want to attach your own meeting notes as context. Use an **Enterprise API key** if a workspace admin wants to provide org-wide meeting context across all team members' notes.
On Enterprise plans, workspace admins can control whether members can create Personal API keys via the **"Allow personal API keys"** toggle in **Settings → Workspace**.
In Chartcastr, go to **Settings** → **Source Integrations** and find the **Granola** card. Enter your API key and click **Test & Connect**.
From any Source or Source Group detail page, click **Add Source Context**, select **Granola**, and browse your meeting notes. Select the notes relevant to the data you're tracking.
## What Gets Cached
When you attach a Granola meeting note, Chartcastr caches the following information for AI analysis:
* **Meeting title** and date/time
* **Attendees** (names and emails)
* **AI-generated summary** (in markdown format)
* **Folder membership** for organizational context
Full transcripts are not cached to keep token usage efficient. The AI summary provides the most relevant context in a compact form.
## Benefits
By linking Granola meeting notes, your AI-generated summaries will understand the "why" behind your data:
* Correlate metric spikes with decisions made in recent meetings
* Include meeting context in your daily or weekly pulses
* Get smarter answers to follow-up questions in Slack based on your meeting history
## Access Scope
What notes you can browse in Chartcastr depends on which API key type you use:
| Key Type | What You Can Access |
| ---------------------- | ---------------------------------------------------------------------------------------------------- |
| **Personal API key** | Notes you own, notes shared with you, notes in private folders shared with you |
| **Enterprise API key** | All notes in the Team space (everything workspace members can read, excluding private notes/folders) |
If your organization has multiple Granola workspaces, you'll need a separate API key per workspace.
## Rate Limits
Granola enforces rate limits per user (Personal) or per workspace (Enterprise):
| Metric | Value |
| -------------- | ------------------------------ |
| Burst capacity | 25 requests |
| Time window | 5 seconds |
| Sustained rate | 5 requests/second (300/minute) |
Chartcastr respects these limits when browsing and fetching notes.
## FAQ
A **Business** or **Enterprise** plan. Personal API keys are available on both. Enterprise API keys require the Enterprise plan and must be created by a workspace admin.
Granola also offers an MCP (Model Context Protocol) integration for conversational AI tools like Claude and ChatGPT. The MCP uses browser-based OAuth and is designed for interactive chat. For Chartcastr's automated context enrichment, the API key approach is the right fit since it runs in the background without user interaction.
Not yet — Granola's webhook support is on their roadmap. Currently, Chartcastr fetches note content when you attach a note as context.
# Notion as context
Source: https://docs.chartcastr.com/analysis/context/notion
Connect Notion pages and databases as external context for Chartcastr AI. Correlate data trends with project milestones and team documentation.
**State**: Available on all plans.
## Overview
Link Notion pages and databases to your Chartcastr Sources to provide deep qualitative context for your automated pulses. This is perfect for:
* Team wikis and knowledge bases
* Project documentation
* Process documentation
* Research and analysis notes
## How It Works
1. **Connect Notion**: Authenticate your Notion workspace using the Integrations settings.
2. **Link Context**: From any Source details page, click "Add Source Context" and select Notion.
3. **Select Pages**: Choose specific pages or database entries to use as context for your charts.
4. **AI Analysis**: Our AI automatically indexes these pages to provide deeper insights into your pulse summaries, connecting your live data to your documentation.
## Benefits
By linking Notion, your AI-generated summaries will understand the "why" behind your data:
* Correlate metric spikes with project milestones documented in Notion.
* Include process context in your daily or weekly pulses.
* Get smarter answers to follow-up questions in Slack based on your internal documentation.
## Permissions & Troubleshooting
### Initial Setup
On your initial signup, Notion requires you to explicitly select the specific files, pages, or workspace tree that Chartcastr has permission to access. While selecting a parent page is expected to grant access to all its children, this inheritance can sometimes be inconsistent.
If new files or pages don't show up in Chartcastr, follow the instructions below to manually grant access.
### Manually Adding Connections
If new files or pages don't show up automatically, you can manually add the Chartcastr connection to any Notion page (including parent pages to grant access to an entire tree).
1. **Open the Page Menu**: Click the three dots `...` in the top right corner of the Notion page.
2. **Add Connection**: Scroll down to "Connect to" or "Add connections".
3. **Find Chartcastr**: Search for "Chartcastr" and select it.
4. **Confirm**: Once added, the page and its children will be accessible to Chartcastr.
Adding a connection to a **parent page** will automatically grant Chartcastr access to all its sub-pages!
## Rich Link Previews
When you paste a Chartcastr URL into a Notion page, Notion can automatically unfurl it into a rich preview showing connection details, chart images, AI summaries, and status — right inline in your document.
### Supported URLs
Any URL matching `chartcastr.com/admin/*` will be unfurled, including:
* **Connection pages** — shows connection name, status, and configuration
* **Source pages** — shows source details and linked integrations
* **Job Run pages** — shows the chart image, AI summary, and run status
### Getting Started
The first time you paste a Chartcastr link, Notion will prompt you to connect your Chartcastr account. Sign in and approve access — this is a one-time step.
Paste any Chartcastr admin URL into a Notion page. Notion will automatically fetch a rich preview with chart images and metadata.
Previews are fetched each time the page loads, so they always reflect the latest data from Chartcastr.
**Availability**: Rich link previews require a **paid plan** (Starter, Pro, or Enterprise).
### Example
Pasting a job run URL like `https://chartcastr.com/admin/connections/jobruns/abc123` will render an inline preview showing:
* The chart image from the most recent run
* AI-generated summary of the analysis
* Run status and timestamp
* Link back to the full Chartcastr dashboard
### Troubleshooting
* **No preview appears**: Ensure you've authorized Chartcastr when prompted by Notion. If you dismissed the prompt, try pasting the link again.
* **"Feature not available" error**: Rich link previews require a paid plan. Upgrade your plan in Chartcastr settings.
* **Stale preview**: Notion caches previews — reload the Notion page to fetch the latest data.
# OneDrive context (early access)
Source: https://docs.chartcastr.com/analysis/context/onedrive
Link OneDrive documents and Excel files as external context for Chartcastr AI analysis. Built for enterprise teams using Microsoft 365 file storage.
**State**: Available on all plans.
## Overview
OneDrive integration will allow enterprise teams to securely link corporate documents to their data analysis. Perfect for:
* Corporate strategy documents
* Compliance documentation
* Team shared files
* Executive reports
## Enterprise Ready
Our OneDrive integration will focus on:
* **Security**: Granular permission matching with your existing OneDrive setup.
* **Large Document Support**: Indexing large PDFs and Word documents for high-level context.
* **Organization-wide Context**: Easily apply shared context across all sources in your organization.
## Interested in OneDrive?
If your organization uses OneDrive and you're interested in our enterprise context features, please reach out to our sales team.
Discuss your enterprise documentation needs with us.
# External context overview
Source: https://docs.chartcastr.com/analysis/context/overview
Add business context from Google Docs, Sheets, Notion, Granola, or user notes to improve the relevance and accuracy of Chartcastr AI analysis.
Context is what makes AI analysis truly powerful. By providing background information about your data, you help the AI generate more relevant, accurate, and actionable insights.
Chartcastr offers several ways to provide context.
## Available Now
These integrations are currently available in the product for external context.
Connect individual tabs for metric definitions and lookup data.
Link strategy docs and planning memos for business context.
Connect team wikis and project documentation.
Link meeting notes so AI summaries understand decisions and follow-ups.
Automatically use canvases from the destination Slack channel as analysis context.
## Planned
These docs exist for roadmap visibility, but the integrations are not currently available in the context picker.
Link corporate documents and executive reports from Microsoft 365.
Link technical specs and team knowledge bases.
## User Notes
Quickly add descriptions directly to your sources.
Add custom descriptions directly to your sources or source groups.
## Next Steps
View and manage all your linked documents and notes in one place.
Organize your sources into groups to scale AI intelligence.
# Slack Canvas as context
Source: https://docs.chartcastr.com/analysis/context/slack-canvas
Let Chartcastr automatically use Slack channel canvases as extra AI context for pulses sent into that channel.
**State**: Available for Slack destinations after reconnecting the Slack app with the **`canvases:read`** permission.
## Overview
Slack Canvas context gives Chartcastr access to canvases in the same Slack channel where a pulse is delivered.
This is useful for:
* Giving AI summaries channel-specific operating context
* Letting follow-up answers reference runbooks, planning notes, and team docs already pinned to that channel
* Keeping context automatic instead of manually mapping documents to every source
## How It Works
1. **Connect Slack as a destination**
2. **Reconnect once with `canvases:read` enabled**
3. **Send a connection to a Slack channel that has canvases**
4. **Chartcastr automatically makes those channel canvases available to the AI**
There is **no manual mapping step**.
If a connection sends to `#marketing`, the AI can inspect canvases from `#marketing`. If a different connection sends to `#finance`, the AI can inspect canvases from `#finance`.
## What Is Automatic
When Slack Canvas permissions are enabled:
* Initial pulse analysis can list canvases in the destination channel
* The AI can read the most relevant canvas when its title looks useful
* Slack follow-up replies in that pulse thread can use the same channel canvases for extra context
Chartcastr does **not** require you to attach each canvas to a source or source group.
## Setup
Connect your Slack workspace as a destination in Chartcastr.
Go to the Slack integration detail page in **Settings → Destinations → Slack** and open the **Context** tab.
If the integration does not show canvas access yet, click **Reconnect** and approve the **`canvases:read`** permission in Slack.
Create or update a connection so the pulse is delivered to the Slack channel whose canvases should be available to the AI.
## Scope
Slack Canvas context is **channel-scoped**:
* A pulse sent to one Slack channel only gets canvases from that same channel
* Private channel canvases are available only if the Chartcastr bot is in that private channel
* If a channel has no canvases, the AI simply continues without them
## FAQ
No. Slack Canvas context is automatic. Once the Slack integration has the right permission, canvases in the destination channel are available to the AI without per-source setup.
No. Chartcastr exposes the channel canvases as available context, and the AI can inspect the relevant ones when needed. It does not need to read every canvas on every pulse.
The Slack destination integration needs the **`canvases:read`** scope. Chartcastr also uses standard Slack file access already granted to the app to list and retrieve canvas content.
Yes, if the Chartcastr bot has access to the private channel. If it is not a member, invite the bot first.
# User notes
Source: https://docs.chartcastr.com/analysis/context/user-notes
Write free-text descriptions for your charts or source groups so the Chartcastr AI understands what the data represents and why it matters.
## Overview
User Notes let you provide context about a specific chart or a collection of charts directly in the product. This context is included in pulse summaries and helps the AI understand what your data represents.
User Notes are a quick way to add context, but for comprehensive business documentation, consider using External Context ([Google Sheets](/analysis/context/google-sheets), [Google Docs](/analysis/context/google-docs)) instead. Both can be mapped to [Single Sources](#assignment-options) or [Source Groups](/admin/sources/source-groups).
## What are User Notes?
User Notes are a text field where you describe what a chart shows and why it matters. The AI includes this description when generating pulse summaries.
**Example context:**
```
Weekly revenue from our SaaS product. This chart tracks MRR (Monthly Recurring Revenue)
from all paid subscriptions. Spikes usually indicate annual billing cycles.
Drops may reflect churn or downgrades.
```
## How It Appears in Product
When viewing a Source or [Source Group](/admin/sources/source-groups), you'll see:
```
User Notes
Provide context about this chart to improve AI analysis quality.
This context will be included in pulse summaries.
Describe what this chart shows, e.g.:
- "Weekly revenue from our SaaS product"
- "Daily active users by platform"
- "Ad spend vs conversions for Q4 campaign"
~0 / 500 tokens
```
## Best Practices
Good: "Weekly revenue from enterprise customers, excluding trials and refunds"
Vague: "This is a revenue chart"
Note patterns the AI should expect:
* "Spikes on Mondays due to weekend batch processing"
* "Zero values on holidays when offices are closed"
* "Quarterly drops reflect planned maintenance windows"
Clarify how metrics are calculated:
* "LTV = Average revenue per user × Average customer lifetime"
* "Active users = Unique logins in past 7 days"
* "MRR includes all recurring subscriptions, excludes one-time fees"
Help the AI understand significance:
* "Target is 10% MoM growth"
* "Alert threshold is 95% uptime"
* "Below 5% is considered healthy churn"
## User Notes vs External Context
| Feature | User Notes | External Context |
| :---------------- | :---------------------------- | :-------------------------- |
| **Setup** | Type directly in product | Link external documents |
| **Maintenance** | Edit each source individually | Update document once |
| **Collaboration** | Single user input | Team can edit documents |
| **Length** | 500 tokens (\~375 words) | Full document content |
| **Best for** | Quick descriptions | Comprehensive documentation |
| **Sharing** | Sources & Groups supported | Sources & Groups supported |
## Assignment Options
You can map User Notes at two levels:
* **Single Source**: The note applies only to pulses from that specific source.
* **Source Group**: The note applies to all sources within the group. This is ideal for describing general trends or shared goals across multiple charts.
## When to Use Each
### Use User Notes when:
* You need a quick description
* The context is specific to one chart or a small group
* You're testing what context helps most
* The explanation is short and simple
### Use External Context when:
* You have existing strategy documents
* Multiple sources share the same context
* Context needs team collaboration
* You want to maintain context in one place
* The documentation is comprehensive
**Consider External Context First**
While User Notes are convenient, external documents are often better because:
* They can be updated without editing each source
* Teams can collaborate on documentation
* Context stays in sync with actual business strategy
* Easier to maintain as your business evolves
Think of User Notes as a quick fix, External Context as the robust solution.
## Tips for Writing Great Context
What does this chart measure? Be specific about metrics and time periods.
Why should stakeholders care about this data? Connect it to business goals.
What should the AI know about limitations or edge cases?
What external factors might influence this data? (campaigns, seasonality, etc.)
## Example Contexts
### Revenue Chart
```
Weekly MRR (Monthly Recurring Revenue) from all active subscriptions.
Excludes trials, refunds, and one-time setup fees. Spikes typically
indicate annual plan conversions. Target growth is 10% MoM. Data
updates every Monday morning after weekend batch processing.
```
### User Activity
```
Daily active users (DAU) measured as unique logins in past 24 hours.
Includes all platforms (web, iOS, Android). Weekend dip is normal.
Major product releases usually cause 15-20% spike in following week.
Baseline target is 10,000 DAU.
```
### Campaign Performance
```
Q4 holiday campaign performance tracking ad spend vs attributed
conversions. Includes Facebook, Google, and LinkedIn ads. ROAS target
is 3.0x. Attribution window is 7-day click. Exclude December 24-26
from analysis due to holiday shipping cutoff.
```
## Managing User Notes
You can manage all sources and their notes in the context settings.
1. Navigate to the Source or [Source Group](/admin/sources/source-groups) detail page.
2. Find the **User Notes** section.
3. Click the text area and enter your description.
4. Changes are saved automatically.
5. New pulses will include the updated context.
Changes to User Notes take effect on the next pulse generation. Existing pulses are not retroactively updated.
## Next Steps
Add notes to one of your existing sources or groups
Learn about linking external documents
# AI analysis in pulses
Source: https://docs.chartcastr.com/analysis/in-pulses
Learn how Chartcastr generates small summaries and overall analyses inside pulse threads. Tips for improving accuracy with context documents.
Analysis in Pulses allows you to get instant insights into your data directly within your communication channels. This feature provides structured summaries and actionable insights based on the data points captured in each pulse.
## How it Works
When a Pulse is triggered, Chartcastr processes the underlying data through our AI analysis engine. If you have provided [Context](/analysis/context/overview), the AI incorporates your business knowledge into these insights.
### Small Summary
The **Small Summary** is designed for quick consumption. It highlights the most critical changes or data points in a concise format, usually appearing as the lead-in to a pulse message in Slack or Microsoft Teams.
* **Purpose**: At-a-glance status updates.
* **Focus**: Key metrics and immediate changes.
### Overall Summary (within the thread)
Within the pulse thread, Chartcastr provides an **Overall Summary**. This is a more comprehensive breakdown of the data, providing context on trends and highlighting anomalies that might require attention.
* **Threaded analysis**: Keeps the conversation focused on specific data events.
* **Context-aware**: Integrates linked documents and notes to explain the "why" behind the numbers.
## Getting Better Results
The accuracy and relevance of Pulse analysis improve as you provide more context.
1. **Link Context Documents**: Add Google Docs, Notion pages, or Confluence spaces that describe your KPIs and business goals.
2. **Add User Notes**: Provide specific instructions or background info for particular source groups.
3. **Refine Source Groups**: Ensure your source groups are focused so the AI isn't overwhelmed with irrelevant data points.
By refining these inputs, the AI becomes more aligned with your specific business logic, delivering insights that are more tailored to your team's needs.
# Analysis features overview
Source: https://docs.chartcastr.com/analysis/overview
Explore Chartcastr AI analysis capabilities including external context, chat follow-ups, and intelligent summaries that make your charts actionable.
The Analysis section covers all AI-powered features in Chartcastr that help you understand your data better. From intelligent summaries to conversational follow-ups, these tools make your charts more actionable and insightful.
Provide business context through external documents or user notes to improve AI analysis.
Deep-dive into your data and manage your workspace through conversation.
## Next Steps
Learn how to add business context to your data.
Ask questions about your pulses in Slack.
# API Overview
Source: https://docs.chartcastr.com/api/overview
REST API for reading your Chartcastr sources and the latest pulse (chart image + AI summary + long analysis) for each source. Authenticated with an API key.
## Overview
The Chartcastr Public API is a small, read-only REST surface for fetching your data sources and the latest [pulse](/admin/pulses) for each — the chart image, the short AI summary, and the long AI analysis.
It's the same data you see in your dashboard, available programmatically for embeds, internal tools, AI agents, or any integration project that needs structured access to your delivered insights.
For richer agent-style access (search, verify, deep links) use the [MCP integrations](/integrations/ai-tools) — Claude, ChatGPT, Cursor, and Codex all connect via API key.
## Base URL
```
https://public.api.chartcastr.com/v1
```
The same routes are also reachable at `https://api.chartcastr.com/v1` (the production server uses both hosts).
## Authentication
All requests require an API key passed in the `X-API-Key` header.
```bash theme={null}
curl https://public.api.chartcastr.com/v1/sources \
-H "X-API-Key: sk_live_..."
```
Generate keys from **[Settings → API Keys](https://chartcastr.com/admin/settings/api-keys?create=true)** in your Chartcastr dashboard. Each key is scoped to a single account. Default expiry is 90 days.
API keys are shown **once** at creation time. Store them securely — if you lose a key you must revoke and regenerate.
### Verify your key
There's no dedicated `/ping` endpoint — instead, call `GET /v1/sources` to confirm a key works. Every successful response includes a `meta.account` object, so this single call doubles as both an access check and your first useful query. `200` means the key resolved; `401` means it's missing, invalid, or expired.
Use this any time you want to confirm a key works before running a heavier integration flow. The response also tells you which account/email the key is bound to.
**Request**
```bash theme={null}
curl https://public.api.chartcastr.com/v1/sources \
-H "X-API-Key: sk_live_..."
```
**Success — 200**
```json theme={null}
{
"meta": {
"account": {
"id": "acc_2abc...",
"email": "you@example.com"
},
"requestedAt": "2026-05-08T10:31:48.000Z"
},
"sources": [ /* ... */ ]
}
```
**Failure — 401**
```json theme={null}
{
"success": false,
"error": "Invalid or expired API key"
}
```
In CI/CD or onboarding flows, branch on the HTTP status: `200` → key works, `401` → prompt the user to regenerate, `429` → back off and retry.
#### Common failure modes
| Symptom | Likely cause |
| ----------------------------------------- | ------------------------------------------------------- |
| `401 Invalid or expired API key` | Key revoked, expired, or never existed |
| `401 Authentication required` | `X-API-Key` header missing entirely |
| `429 Too Many Requests` | More than 60 calls in the last minute on this key |
| `200` but `meta.account.id` is unexpected | The key belongs to a different account than you thought |
## Response Shape
Every successful response includes a `meta` object so you can confirm which account the key resolved to:
```json theme={null}
{
"meta": {
"account": {
"id": "acc_...",
"email": "you@example.com"
},
"requestedAt": "2026-05-08T10:31:48.000Z"
},
"sources": [ ... ]
}
```
## Errors
| Status | Meaning |
| ------ | --------------------------------------------------- |
| `401` | Missing or invalid `X-API-Key` |
| `403` | Key valid but lacks the required scope |
| `404` | Resource (source, pulse) not found for this account |
| `429` | Rate limit exceeded |
| `500` | Server error — retry with backoff |
Error bodies follow the shape:
```json theme={null}
{
"success": false,
"error": "No pulse found for this source"
}
```
## Rate Limits
Public API endpoints are rate limited to **60 requests per minute** per API key. Each response includes the current window state in headers:
| Header | Description |
| ----------------------- | ----------------------------------------------- |
| `X-RateLimit-Limit` | Maximum requests per window |
| `X-RateLimit-Remaining` | Requests left in the current window |
| `X-RateLimit-Reset` | Unix timestamp (seconds) when the window resets |
## OpenAPI Spec
The full machine-readable spec is served at:
```
GET https://public.api.chartcastr.com/v1/openapi.yaml
```
You can paste this directly into Postman, Insomnia, or any OpenAPI-aware tool to generate a typed client.
## Endpoints
List configured data sources.
Fetch the latest pulse for a source.
# Pulses
Source: https://docs.chartcastr.com/api/pulses
Fetch the latest pulse for a source — the chart image, short AI summary, and long AI analysis from the most recent successful job run.
## Overview
A **pulse** is a single delivered run for a source: a rendered chart image plus the AI-generated commentary that goes with it. The Pulses endpoints return the most recent successful pulse — across any of the source's connections — so you always get the freshest analysis.
Fetch a pulse by **source ID** — get the ID from `GET /v1/sources`.
## Endpoints
Returns the most recent `SUCCESS` job run for the given source, including the chart image URL and both AI summaries.
**Request**
```bash theme={null}
curl "https://public.api.chartcastr.com/v1/sources/src_01J.../pulse" \
-H "X-API-Key: sk_live_..."
```
**Path parameters**
| Parameter | Type | Description |
| ---------- | ------ | -------------------------------- |
| `sourceId` | string | Source ID from `GET /v1/sources` |
**Success — 200**
```json theme={null}
{
"meta": {
"account": { "id": "acc_2abc...", "email": "you@example.com" },
"requestedAt": "2026-05-08T10:31:48.000Z"
},
"pulse": {
"jobRunId": "run_01J...",
"sourceId": "src_01J...",
"sourceName": "Q2 Revenue Sheet",
"status": "SUCCESS",
"completedAt": "2026-05-08T09:00:12.000Z",
"imageUrl": "https://cdn.chartcastr.com/charts/...",
"aiSummaryShort": "Revenue up 12% week-over-week, driven by enterprise tier.",
"aiSummaryLong": "Weekly revenue grew from $48,200 to $54,000...",
"deliveryLink": "https://acme.slack.com/archives/C123/p17152...",
"organizationId": "org_01J...",
"organizationName": "Acme",
"organizationSlug": "acme"
}
}
```
**Pulse fields**
| Field | Type | Description |
| ------------------ | ---------------- | ---------------------------------------------------------- |
| `jobRunId` | string | Unique ID of the successful job run |
| `sourceId` | string | Source this pulse belongs to |
| `sourceName` | string \| null | Source display name at the time of the run |
| `status` | string | Always `SUCCESS` (only successful runs are returned) |
| `completedAt` | datetime \| null | When the job finished |
| `imageUrl` | string \| null | Rendered chart image (PNG) |
| `aiSummaryShort` | string \| null | One-line AI commentary — good for previews |
| `aiSummaryLong` | string \| null | Full AI analysis — good for embedded reports |
| `deliveryLink` | string \| null | Link to the delivered Slack message (if Slack destination) |
| `organizationId` | string | Internal organization ID |
| `organizationName` | string \| null | Organization display name |
| `organizationSlug` | string \| null | Organization URL slug |
**Failure — 404**
```json theme={null}
{ "success": false, "error": "No pulse found for this source" }
```
Returned when the source exists but has never produced a successful run.
## Image URLs
`imageUrl` points to a rendered chart PNG hosted on Chartcastr's CDN. Links are durable for delivered pulses and can be embedded directly in dashboards, Notion, or anywhere that accepts a public image URL.
## Example: Embed the latest analysis
```ts theme={null}
const id = 'src_01J...'
const res = await fetch(
`https://public.api.chartcastr.com/v1/sources/${id}/pulse`,
{ headers: { 'X-API-Key': process.env.CHARTCASTR_KEY! } },
)
const { pulse } = await res.json()
return `
${pulse.aiSummaryShort}
Full analysis${pulse.aiSummaryLong}
`
```
## Next Steps
Auth, rate limits, and the OpenAPI spec.
Use the same key with Claude, ChatGPT, Cursor, or Codex via MCP.
# Sources
Source: https://docs.chartcastr.com/api/sources
List the data sources connected to your Chartcastr account, including provider, status, and the number of connections using each source.
## Overview
A **source** is a configured data provider — Google Sheets, HubSpot, Shopify, Xero, etc. — owned by your account. Each source can be referenced by multiple connections (delivery schedules) and is the entry point for fetching the latest [pulse](/api/pulses).
The Sources endpoint returns the most recently updated sources for the authenticated account, including the provider, status, deep link to the dashboard, and a count of connections currently using it.
## Endpoint
Returns up to 10 of the most recently updated, non-archived sources for the account behind the API key.
**Request**
```bash theme={null}
curl https://public.api.chartcastr.com/v1/sources \
-H "X-API-Key: sk_live_..."
```
**Success — 200**
```json theme={null}
{
"meta": {
"account": { "id": "acc_2abc...", "email": "you@example.com" },
"requestedAt": "2026-05-08T10:31:48.000Z"
},
"sources": [
{
"id": "src_01J...",
"name": "Q2 Revenue Sheet",
"provider": "GOOGLE",
"status": "ACTIVE",
"link": "https://chartcastr.com/admin/sources/src_01J...",
"connectionCount": 3,
"organizationId": "org_01J...",
"organizationName": "Acme",
"organizationSlug": "acme"
}
]
}
```
**Source fields**
| Field | Type | Description |
| ------------------ | -------------- | ----------------------------------------------------------------- |
| `id` | string | Unique source ID — pass to `/v1/sources/{sourceId}/pulse` |
| `name` | string \| null | User-supplied display name |
| `provider` | string | Integration provider, e.g. `GOOGLE`, `SHOPIFY`, `HUBSPOT`, `XERO` |
| `status` | enum | `PENDING`, `DRAFT`, `ACTIVE`, `DEGRADED`, or `BROKEN` |
| `link` | string | Deep link to the source page in the Chartcastr admin |
| `connectionCount` | integer | How many connections (delivery schedules) use this source |
| `organizationId` | string | Internal organization ID this source belongs to |
| `organizationName` | string \| null | Organization display name |
| `organizationSlug` | string \| null | Organization URL slug |
**Failure — 401**
```json theme={null}
{ "success": false, "error": "Invalid or expired API key" }
```
Results are capped at 10 sources, ordered by `updatedAt` descending. If you need a complete inventory, contact support — pagination is on the roadmap.
## Status Values
| Status | Meaning |
| ---------- | ---------------------------------------------------------- |
| `PENDING` | Source created but not yet authorized |
| `DRAFT` | Configured but not ready to deliver |
| `ACTIVE` | Healthy and delivering on schedule |
| `DEGRADED` | Last few runs had issues — investigate the source page |
| `BROKEN` | Authorization or upstream API failure — needs reconnection |
## Example: Filter by provider
The endpoint returns all sources — filter client-side by `provider` if you only care about one integration:
```ts theme={null}
const res = await fetch('https://public.api.chartcastr.com/v1/sources', {
headers: { 'X-API-Key': process.env.CHARTCASTR_KEY! },
})
const { sources } = await res.json()
const shopify = sources.filter((s) => s.provider === 'SHOPIFY')
```
## Next Steps
Pass any `id` from this list to the Pulses endpoint to get the chart, short summary, and long AI analysis.
# What is Chartcastr?
Source: https://docs.chartcastr.com/index
Chartcastr automates chart delivery with AI summaries to Slack, Teams, and email. Connect data sources and get scheduled visual insights.
## What is Chartcastr?
Chartcastr enables you to automatically push charts and pivot tables from various data sources to messaging platforms like Slack and email. Share visual data insights and build up intelligence on growth lines of your business.
Get started with Chartcastr in 5 minutes
Browse available data sources and destinations
Manage your connections and settings
## Key Features
Schedule automatic delivery of charts from your data sources to your team's communication channels.
Send charts to Slack or email. Configure multiple destinations for each chart.
Set up hourly, daily, weekly, or custom schedules with timezone-aware delivery.
## How It Works
Link your data source
Link your source to destinations like Slack or email with custom settings
Set when and how often to send your charts
## Popular Use Cases
* **Daily Standups:**\
Share up-to-date KPI dashboards with your team every morning to keep everyone focused and aligned.
* **Pulse Channels:**\
Automatically post analytics and updates to always-on channels like `#data-insights` or `#company-pulse`, so everyone can see trends in real time.
* **Pattern Detection with AI:**\
Combine human review with AI-powered analysis—receive highlights or summaries pointing out patterns and outliers that might otherwise go unnoticed.
## Where [Briefings](/analysis/briefings/overview) shine
Pulses are the heartbeat. Briefings are the monthly retrospective — a single PDF that synthesises across every source you care about, with cross-source AI commentary and an overall "big picture" review. A few of the use cases customers reach for first:
* **Accelerated client reporting:**\
Replace the Monday-morning report build with a per-client briefing that auto-renders on the 1st of the month — every channel, every metric, one PDF, AI-written commentary already in place.
* **Board deck asset prep:**\
Run a finance + growth + retention briefing the week before each board meeting. The PDF becomes the ready-made appendix, and the overall review becomes the first draft of your CEO update.
* **Pitch deck prep:**\
Spin up a "metrics for investors" briefing that combines top-line growth, channel performance, and unit economics. Send a snapshot before every investor call so the latest numbers are always one tap away.
* **All-hands progress reports:**\
One briefing, one row per team or workstream, one PDF circulated the morning of the all-hands. The AI cross-analysis surfaces the themes — leadership stops writing the recap from scratch.
Rows, items, the once-a-month delivery, and the AI layers that compose the cross-source synthesis.
Deeper write-ups for each use case above — agency client reporting, board prep, pitch prep, all-hands.
## Supported Integrations
### Data Sources
### Destinations
Coming Soon
## Get Started
Follow our step-by-step guide to set up your first automated chart delivery in under 5 minutes.
## Need Help?
Read Guides
Contact our support team for assistance
View our code and contribute
# AI Tools — Setup
Source: https://docs.chartcastr.com/integrations/ai-tools
Three steps to connect any MCP-compatible AI tool (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex) to Chartcastr.
Connect any MCP-compatible AI tool to your Chartcastr account in three steps. Pick your tool, run one command (or paste one block of JSON), restart, done.
> Looking for the **why** instead of the **how**? See [AI Tools — Concepts](/integrations/ai-tools-concepts) for the context-layer and action-agent patterns.
***
## Step 1 — Get an API key
In the Chartcastr dashboard, open [**Settings → API Keys**](https://chartcastr.com/admin/settings/api-keys?create=true) and create a new key. Copy it — you'll paste it in Step 2.
> Treat this key like a password. Anyone with it can read your sources, connections, and pulse analysis.
***
## Step 2 — Install the MCP server in your tool
Pick your tool and run the matching command.
One line in your terminal:
```bash theme={null}
claude mcp add --transport http chartcastr \
https://api.chartcastr.com/api/mcp \
--header "X-API-Key: YOUR_API_KEY"
```
That's it — Claude Code persists this in your user config. Skip to Step 3.
Prefer JSON? See the [Claude Code page](/integrations/claude-code) for the `.mcp.json` form.
Open the config file for your platform:
* **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
* **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
Add (or merge) this block, replacing `YOUR_API_KEY`:
```json theme={null}
{
"mcpServers": {
"chartcastr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.chartcastr.com/api/mcp",
"--header",
"X-API-Key:YOUR_API_KEY"
]
}
}
}
```
Quit and reopen Claude. Full details on the [Claude Desktop page](/integrations/claude).
Create or edit `.cursor/mcp.json` in your project (or `~/.cursor/mcp.json` for global):
```json theme={null}
{
"mcpServers": {
"chartcastr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.chartcastr.com/api/mcp",
"--header",
"X-API-Key:YOUR_API_KEY"
]
}
}
}
```
Open **Cursor Settings → MCP** and toggle `chartcastr` on. Switch to **Agent** mode to use it. Full details on the [Cursor page](/integrations/cursor).
Open ChatGPT Settings → **MCP Servers** → **Add server**:
* **Name:** `chartcastr`
* **Command:** `npx`
* **Args:** `-y mcp-remote https://api.chartcastr.com/api/mcp --header X-API-Key:YOUR_API_KEY`
Restart ChatGPT. For GPT Actions (REST, no MCP) and full details, see the [ChatGPT page](/integrations/chatgpt).
Edit `~/.codex/config.yaml`:
```yaml theme={null}
mcpServers:
chartcastr:
command: npx
args:
- "-y"
- "mcp-remote"
- "https://api.chartcastr.com/api/mcp"
- "--header"
- "X-API-Key:YOUR_API_KEY"
```
Run `codex`. Full details on the [Codex page](/integrations/codex).
***
## Step 3 — Verify it works
Ask your tool one of these:
* *"List my Chartcastr sources."*
* *"What did the latest pulse say about my HubSpot connection?"*
* *"Are any of my connections inactive?"*
If you see real data come back, you're done. If not, jump to [Troubleshooting](#troubleshooting).
In Claude Code or Claude Desktop, you can also run `/mcp` to see the active server list — `chartcastr` should appear.
***
## Available tools
These are the tools your AI agent can call once connected:
| Tool | What it returns |
| ------------------- | ------------------------------------------------------------ |
| `list_sources` | Every connected data source with status and connection count |
| `list_destinations` | Every configured destination (Slack workspace, email, etc.) |
| `list_connections` | Every active chart delivery — source, destination, cadence |
| `get_latest_pulse` | Full AI narrative analysis from the most recent delivery |
| `verify_connection` | Live confirmation a specific connection is active |
| `open_chartcastr` | Deep link to open the dashboard at a specific page |
***
## Local development
Running Chartcastr locally with `bun up`? Swap the URL to `http://localhost:8109/api/mcp` and use a key generated against your local server.
```bash theme={null}
claude mcp add --transport http chartcastr-local \
http://localhost:8109/api/mcp \
--header "X-API-Key: YOUR_LOCAL_KEY"
```
***
## Troubleshooting
Your key is wrong, expired, or revoked. Regenerate at [Settings → API Keys](https://chartcastr.com/admin/settings/api-keys?create=true) and re-run the install command.
Most MCP clients only load servers at startup. **Quit fully and relaunch** — a window reload isn't enough. In Claude Code, run `/mcp` to force a server-list refresh.
First run downloads the `mcp-remote` package — give it \~30 seconds. If it persists, run `npx -y mcp-remote@latest` once manually to prime the cache.
A specific tool may be feature-flagged off during rollout. Check [status.chartcastr.com](https://status.chartcastr.com) or contact support.
# AI Tools — Concepts
Source: https://docs.chartcastr.com/integrations/ai-tools-concepts
Why connect AI tools to Chartcastr — the context-layer pattern, the action-agent pattern, and what becomes possible.
> Looking for setup steps? See [AI Tools — Setup](/integrations/ai-tools).
Chartcastr exposes a [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that lets any MCP-compatible AI tool — Claude Code, Cursor, ChatGPT, Codex — read your account data directly. Sources, destinations, connections, and the latest pulse analysis are all available as structured tool calls.
This unlocks two distinct patterns.
***
## Pattern 1 — Context layer
Your AI assistant knows more when it knows what's happening in your business.
Without MCP, you describe your data situation manually. *"Revenue is down 12% this week, conversion has slipped, and we're seeing lower engagement on the enterprise tier."* You become the bridge — copying from dashboards, summarising in plain text, hoping you captured the nuance.
With Chartcastr connected via MCP, your agent can fetch that analysis itself. It can pull the latest pulse — which includes not just the raw numbers but Chartcastr's contextual analysis of what changed, why it matters in the context of prior trends, and what's anomalous — and use that as the starting point for whatever you're asking it to do.
This matters for coding tasks, copywriting, strategic planning, customer emails, and anything else where business context shapes the output.
***
## Pattern 2 — Action agents
This is where it gets more interesting.
Chartcastr runs on a schedule. Every morning (or every hour, or every week — you configure it), it ingests data from your sources, runs AI analysis against your historical context, and produces a pulse: a structured, narrative interpretation of your business right now.
Previously, that pulse went to Slack or email. A human read it, decided what to do, and acted.
Now you can put an agent in that loop.
An action agent connects to Chartcastr via MCP, fetches the latest pulse for one or more connections, interprets the analysis, and decides what to do next:
* If CAC is trending up and conversion is dropping, trigger a deep-dive analysis script
* If revenue is significantly above target, generate and schedule a team celebration post
* If a key metric crosses a threshold, open a GitHub issue or create a Linear ticket
* If the pulse flags an anomaly, send an escalation to a specific Slack channel with additional context
Chartcastr has already done the hard work: ingesting the data, normalising it, running it against prior periods, applying your business context, and producing a human-readable interpretation. Your agent doesn't need to recreate that pipeline. It just needs to read the output and decide what to do.
```
Your data sources
↓
Chartcastr (scheduled analysis, context, AI interpretation)
↓
MCP → Your AI agent
↓
Actions (Slack, GitHub, Linear, email, scripts, webhooks…)
```
***
## What's exposed via MCP
| Tool | What it returns |
| ------------------- | ------------------------------------------------------------ |
| `list_sources` | Every data source with status and connection count |
| `list_destinations` | Every configured destination (Slack workspace, email, etc.) |
| `list_connections` | Every active chart delivery — source, destination, cadence |
| `get_latest_pulse` | The full AI narrative analysis from the most recent delivery |
| `verify_connection` | Live confirmation that a specific connection is active |
| `open_chartcastr` | Deep link to open any part of the dashboard |
`get_latest_pulse` is the richest — it returns Chartcastr's full narrative analysis, not just raw numbers. This is what makes the action agent pattern work: the agent gets interpreted context, not a spreadsheet.
***
## The bigger picture
Most AI tools are powerful but context-blind. They know how to reason, but they don't know what's happening in your business right now. Chartcastr is the layer that provides that context — continuously, on schedule, with full access to your data stack.
The MCP integration is the bridge between Chartcastr's analysis and the agents that can act on it. Used as a simple context layer, it makes every AI conversation more grounded. Used to power action agents, it closes the loop from data → insight → action entirely.
Ready to set it up? [Three-step install →](/integrations/ai-tools)
# ChatGPT
Source: https://docs.chartcastr.com/integrations/chatgpt
Connect ChatGPT to Chartcastr and query your data from inside your conversations using the Model Context Protocol or GPT Actions.
## Overview
Chartcastr supports two ways to connect with ChatGPT:
1. **MCP (ChatGPT desktop)** — The ChatGPT desktop app supports MCP servers, letting you query Chartcastr data directly from any conversation.
2. **GPT Actions** — Build a custom GPT that calls Chartcastr's REST API. Best for sharing a configured assistant with your team.
***
## Option 1: MCP via ChatGPT Desktop
### Prerequisites
* ChatGPT desktop app (macOS or Windows) with MCP support enabled
* A Chartcastr account on any paid plan
* An API key from **Settings → API Keys**
### 1. Generate an API key
In Chartcastr, go to **Settings → API Keys** and create a new key.
### 2. Add Chartcastr as an MCP server
Open ChatGPT Settings and navigate to the **MCP Servers** section. Add a new server with:
* **Name:** Chartcastr
* **Command:** `npx`
* **Args:** `-y mcp-remote https://api.chartcastr.com/api/mcp --header X-API-Key:YOUR_API_KEY`
Or, if ChatGPT uses a JSON config file (check the [official ChatGPT MCP docs](https://openai.com/index/model-context-protocol-support) for the latest format):
```json theme={null}
{
"mcpServers": {
"chartcastr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.chartcastr.com/api/mcp",
"--header",
"X-API-Key:YOUR_API_KEY"
]
}
}
}
```
### 3. Restart ChatGPT
Quit and reopen the app. Chartcastr tools should appear when you start a conversation.
***
## Option 2: GPT Actions
GPT Actions let your custom GPT call Chartcastr's REST API directly.
### 1. Create a Custom GPT
Go to [chatgpt.com/gpts/editor](https://chatgpt.com/gpts/editor) and click **Create a GPT**.
### 2. Add an Action
Under the **Actions** tab, click **Add action** and paste Chartcastr's OpenAPI spec URL:
```
https://api.chartcastr.com/api/gpt/openapi.json
```
### 3. Set authentication
Select **API Key** as the auth type and paste your Chartcastr API key. The header name is `X-API-Key`.
***
## Available MCP Tools
| Tool | Description |
| ------------------- | -------------------------------------------------- |
| `list_sources` | List all data sources connected to your account |
| `list_destinations` | List all configured destinations |
| `list_connections` | List all active chart delivery connections |
| `get_latest_pulse` | Fetch the most recent AI analysis for a connection |
| `verify_connection` | Confirm a connection is active |
## Further Reading
* [ChatGPT MCP announcement](https://openai.com/index/model-context-protocol-support) — official OpenAI MCP guide
* [Chartcastr API Keys](https://chartcastr.com/admin/settings/api-keys?create=true) — manage your keys
# Claude (Desktop)
Source: https://docs.chartcastr.com/integrations/claude
Connect Claude's desktop app to Chartcastr via MCP and query your data sources, connections, and pulse analysis directly from your conversations.
## Overview
The [Claude desktop app](https://claude.ai/download) supports MCP servers natively. Once configured, you can ask Claude about your Chartcastr account without switching to a browser.
## Prerequisites
* Claude desktop app installed (macOS or Windows)
* A Chartcastr account on any paid plan
* An API key from **Settings → API Keys** in your Chartcastr dashboard
## Setup
### 1. Generate an API key
In Chartcastr, go to **Settings → API Keys** and create a new key.
### 2. Edit the Claude config file
Open the config file for your platform in a text editor:
```
~/Library/Application Support/Claude/claude_desktop_config.json
```
```
%APPDATA%\Claude\claude_desktop_config.json
```
If the file doesn't exist yet, create it.
### 3. Add the Chartcastr MCP server
Paste the following, replacing `YOUR_API_KEY`:
```json theme={null}
{
"mcpServers": {
"chartcastr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.chartcastr.com/api/mcp",
"--header",
"X-API-Key:YOUR_API_KEY"
]
}
}
}
```
### 4. Restart Claude
Quit and reopen the Claude desktop app. A small hammer icon will appear in the text input area when MCP tools are available.
## Available Tools
| Tool | Description |
| ------------------- | ----------------------------------------------------- |
| `list_sources` | List all data sources connected to your account |
| `list_destinations` | List all configured destinations (Slack, email, etc.) |
| `list_connections` | List all active chart delivery connections |
| `get_latest_pulse` | Fetch the most recent AI analysis for a connection |
| `verify_connection` | Confirm a connection is active |
| `open_chartcastr` | Generate a deep link to open Chartcastr |
## Example Prompts
* *"What data sources do I have in Chartcastr?"*
* *"Show me all my active connections."*
* *"What did the latest pulse say about my HubSpot connection?"*
## Further Reading
* [Claude MCP setup guide](https://modelcontextprotocol.io/quickstart/user) — official MCP docs for Claude desktop
* [Chartcastr API Keys](https://chartcastr.com/admin/settings/api-keys?create=true) — manage your keys
# Claude Code
Source: https://docs.chartcastr.com/integrations/claude-code
Connect Claude Code to Chartcastr via the Model Context Protocol and query your data, connections, and pulses directly from your AI assistant.
[Claude Code](https://claude.ai/code) supports remote MCP servers natively. The fastest path is one terminal command — no JSON editing required.
## Prerequisites
* A Chartcastr account on any paid plan
* Claude Code installed (`npm install -g @anthropic-ai/claude-code`)
* An API key from [**Settings → API Keys**](https://chartcastr.com/admin/settings/api-keys?create=true)
***
## Setup (recommended: one-liner)
```bash theme={null}
claude mcp add --transport http chartcastr \
https://api.chartcastr.com/api/mcp \
--header "X-API-Key: YOUR_API_KEY"
```
Replace `YOUR_API_KEY` with the key from your dashboard. Claude Code persists the server in your user config and loads it on next startup. To restrict the install to one project, add `--scope project`.
Verify with `/mcp` — `chartcastr` should appear in the list.
***
## Setup (alternative: `.mcp.json`)
Prefer to commit a project-scoped config? Create `.mcp.json` at your project root and **add it to `.gitignore`** to keep your key private:
```json theme={null}
{
"mcpServers": {
"chartcastr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.chartcastr.com/api/mcp",
"--header",
"X-API-Key:YOUR_API_KEY"
]
}
}
}
```
Restart Claude Code or run `/mcp` to load.
***
## Available tools
| Tool | Description |
| ------------------- | ------------------------------------------------------- |
| `list_sources` | List all data sources connected to your account |
| `list_destinations` | List all configured destinations (Slack, email, etc.) |
| `list_connections` | List all active chart delivery connections |
| `get_latest_pulse` | Fetch the most recent pulse analysis for a connection |
| `verify_connection` | Confirm a connection is active and delivering |
| `open_chartcastr` | Generate a deep link to open Chartcastr in your browser |
## Example prompts
* *"What data sources do I have in Chartcastr?"*
* *"Show me all my active connections and their schedules."*
* *"What did the latest pulse say about my HubSpot connection?"*
* *"Is my Google Sheets → Slack connection still running?"*
***
## Local development
Running Chartcastr locally with `bun up`? Point at your local server:
```bash theme={null}
claude mcp add --transport http chartcastr-local \
http://localhost:8109/api/mcp \
--header "X-API-Key: YOUR_LOCAL_KEY"
```
***
## Troubleshooting
Your key is wrong, expired, or revoked. Regenerate at [Settings → API Keys](https://chartcastr.com/admin/settings/api-keys?create=true) and re-run `claude mcp add` (it overwrites the existing entry).
Some tools may be disabled during rollout. Run `/mcp` to see what's exposed by the server, and contact support if you need access to a specific capability.
Run `claude mcp list` to confirm it's registered. If it's there but Claude Code doesn't show it, fully quit and relaunch. If it's missing, the install command failed — re-run it and check the terminal output.
# Codex (OpenAI)
Source: https://docs.chartcastr.com/integrations/codex
Connect OpenAI Codex CLI to Chartcastr via MCP and access your data sources and connections from your terminal.
## Overview
[OpenAI Codex](https://github.com/openai/codex) is an open-source AI coding agent that runs in your terminal. It supports MCP servers, letting you give Codex read access to your Chartcastr account data.
## Prerequisites
* Codex CLI installed (`npm install -g @openai/codex` or `pip install openai-codex`)
* A Chartcastr account on any paid plan
* An API key from **Settings → API Keys**
Codex MCP support and config format may change as the project is actively developed. Always check the [official Codex docs](https://github.com/openai/codex) for the latest instructions.
## Setup
### 1. Generate an API key
In Chartcastr, go to **Settings → API Keys** and create a new key.
### 2. Add Chartcastr to your Codex config
Create or edit `~/.codex/config.yaml`:
```yaml theme={null}
mcpServers:
chartcastr:
command: npx
args:
- "-y"
- "mcp-remote"
- "https://api.chartcastr.com/api/mcp"
- "--header"
- "X-API-Key:YOUR_API_KEY"
```
Replace `YOUR_API_KEY` with the key you generated in step 1.
If Codex uses a JSON config instead, use this format:
```json theme={null}
{
"mcpServers": {
"chartcastr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.chartcastr.com/api/mcp",
"--header",
"X-API-Key:YOUR_API_KEY"
]
}
}
}
```
### 3. Run Codex
Start Codex in your terminal. It will automatically connect to any configured MCP servers at startup:
```bash theme={null}
codex
```
## Available Tools
| Tool | Description |
| ------------------- | ----------------------------------------------------- |
| `list_sources` | List all data sources connected to your account |
| `list_destinations` | List all configured destinations (Slack, email, etc.) |
| `list_connections` | List all active chart delivery connections |
| `get_latest_pulse` | Fetch the most recent AI analysis for a connection |
| `verify_connection` | Confirm a connection is active |
| `open_chartcastr` | Generate a deep link to open Chartcastr |
## Example Prompts
* *"What Chartcastr sources do I have?"*
* *"List my active connections and their schedules."*
* *"Get the latest pulse from my Google Sheets connection."*
## Further Reading
* [OpenAI Codex on GitHub](https://github.com/openai/codex) — source, docs, and config reference
* [Chartcastr API Keys](https://chartcastr.com/admin/settings/api-keys?create=true) — manage your keys
# Cursor
Source: https://docs.chartcastr.com/integrations/cursor
Connect Cursor to Chartcastr via MCP and query your data sources, connections, and pulse analysis from inside your IDE.
## Overview
[Cursor](https://www.cursor.com) supports MCP servers from version 0.40 onwards. You can add Chartcastr as an MCP server so Cursor's AI can read your account data when you ask it to.
## Prerequisites
* Cursor version 0.40 or later
* A Chartcastr account on any paid plan
* An API key from **Settings → API Keys** in your Chartcastr dashboard
## Setup
### 1. Generate an API key
In Chartcastr, go to **Settings → API Keys** and create a new key.
### 2. Add Chartcastr as an MCP server
You can configure MCP servers globally or per-project.
Create or edit `~/.cursor/mcp.json`:
```json theme={null}
{
"mcpServers": {
"chartcastr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.chartcastr.com/api/mcp",
"--header",
"X-API-Key:YOUR_API_KEY"
]
}
}
}
```
Create or edit `.cursor/mcp.json` in your project root:
```json theme={null}
{
"mcpServers": {
"chartcastr": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.chartcastr.com/api/mcp",
"--header",
"X-API-Key:YOUR_API_KEY"
]
}
}
}
```
Add `.cursor/mcp.json` to `.gitignore` if your key is in it.
Replace `YOUR_API_KEY` with the key from step 1.
### 3. Enable the server in Cursor Settings
1. Open **Cursor Settings** → **MCP**
2. You should see `chartcastr` listed. Toggle it on.
3. Click **Refresh** if it doesn't appear immediately.
### 4. Use it in Agent mode
Switch Cursor to **Agent** mode (not Ask or Edit). You can now reference Chartcastr tools in your prompts.
## Available Tools
| Tool | Description |
| ------------------- | ----------------------------------------------------- |
| `list_sources` | List all data sources connected to your account |
| `list_destinations` | List all configured destinations (Slack, email, etc.) |
| `list_connections` | List all active chart delivery connections |
| `get_latest_pulse` | Fetch the most recent AI analysis for a connection |
| `verify_connection` | Confirm a connection is active |
| `open_chartcastr` | Generate a deep link to open Chartcastr |
## Example Prompts (in Agent mode)
* *"List my Chartcastr sources"*
* *"Which of my connections are currently active?"*
* *"Get the latest pulse for my Xero connection"*
## Further Reading
* [Cursor MCP docs](https://docs.cursor.com/context/model-context-protocol) — official setup guide
* [Chartcastr API Keys](https://chartcastr.com/admin/settings/api-keys?create=true) — manage your keys
# Destinations overview
Source: https://docs.chartcastr.com/integrations/destinations
Deliver Chartcastr charts and AI summaries to Slack, Microsoft Teams, Google Chat, email, or custom webhooks on an automated schedule.
Chartcastr supports multiple destinations where you can automatically deliver your charts, dashboards, and data visualizations. Connect your preferred communication platforms to start sharing insights with your team.
Send charts to Slack channels and direct messages
Deliver reports via email to individuals or groups
Deliver charts to Google Chat spaces and DMs
Share visualizations in Teams channels and chats
Send pulses to Ando channels and DMs (replies coming soon)
## Next Steps
Learn how to set up the Slack integration and start sending pulses to your channels.
# Ando destination
Source: https://docs.chartcastr.com/integrations/destinations/ando
Connect Chartcastr to Ando to deliver automated charts and AI summaries to your Ando conversations on a schedule.
## Overview
Ando integration lets you automatically deliver charts, visualizations, and AI-powered analysis to your Ando channels and DMs. Connect once with an API key and pick the conversation that receives each pulse.
**Replies and follow-up questions aren't supported yet.** Chartcastr posts the pulse and a threaded chart update, but replying in the Ando thread won't trigger an AI follow-up. We're working on it.
## Features
* **Channel & DM delivery**: Send pulses to any Ando conversation your API key has access to.
* **Threaded chart updates**: The chart, AI summary, and long-form analysis are grouped into a single thread per pulse.
* **AI analysis included**: Every pulse includes a short summary and highlights with the chart image; the long-form analysis posts as a threaded reply.
* **API key auth**: No OAuth handshake — paste a key and you're connected.
* **Scheduled reports**: Daily, weekly, or custom schedules.
## Setup
Open Ando and go to **Settings → API keys**. Create or copy a key (starts with `ando_sk_`).
In Chartcastr, go to **Settings → Destinations** and click **Connect** next to Ando. Paste the API key.
Once connected, your Ando conversations appear in the destination picker when creating or editing a connection. Select the channel or DM where charts should be delivered.
Pair a data source (e.g., Google Sheets, HubSpot, Shopify) with your Ando destination and choose a schedule.
## Supported Sources
Ando works with all Chartcastr data sources.
## Next Steps
Set up your first chart delivery in minutes.
Compare with the Slack destination, which supports reply-based AI follow-ups today.
# Custom email destination (early access)
Source: https://docs.chartcastr.com/integrations/destinations/custom-email
Send Chartcastr reports to any email address or distribution list outside your organization. Customize subject lines and recipient groups.
**State**: Coming Soon — Custom email integration is currently in development.
## Overview
Custom Email allows you to send pulse reports and chart notifications to any email address, not just your logged-in account email. This is perfect for:
* Distribution lists (e.g., [team@company.com](mailto:team@company.com))
* Executive stakeholders
* External partners or clients
* Team inboxes
This is **different** from the standard [Email](/integrations/destinations/email) destination, which sends to the primary email address associated with your logged-in account.
## Planned Features
* **Multiple Recipients**: Add multiple email addresses to receive the same pulse
* **Distribution Lists**: Send to group email addresses
* **Custom Formatting**: Tailor email content for different audiences
* **Scheduling**: Set different delivery times for different recipients
## How It Will Work
1. **Add Custom Email Destination**: Navigate to [Settings → Destinations](https://chartcastr.com/admin/settings) and add a custom email address.
2. **Configure Recipients**: Specify one or more email addresses to receive notifications.
3. **Assign to Connections**: Link the custom email destination to your connections.
4. **Automatic Delivery**: Pulses will be delivered to all configured recipients.
## Early Access
If you need to send pulses to custom email addresses or distribution lists, please contact us about early access.
Get notified when custom email destinations are ready.
# Email destination
Source: https://docs.chartcastr.com/integrations/destinations/email
Deliver scheduled Chartcastr charts and AI-powered summaries via email to organization members or distribution lists on a recurring schedule.
## Current Support
Email integration is currently available for your logged-in account.
### How it Works
This is the default email destination. When you set up an email notification, it will be sent to the primary email address associated with your login account.
Support for sending to custom email addresses and distribution lists is available through [Custom Email](/integrations/destinations/custom-email).
# Google Chat destination
Source: https://docs.chartcastr.com/integrations/destinations/google-chat
Connect Chartcastr to Google Chat to deliver automated charts and AI insights to spaces or direct messages. Set up webhooks and schedules.
## Overview
Google Chat integration lets you automatically deliver charts, visualizations, and AI-powered analysis directly to Google Chat spaces and DMs. It uses your existing Google Workspace account — no extra bot tokens or service accounts required.
## Features
* **Space Delivery**: Send charts to any Google Chat space your account has access to.
* **Direct Messages**: Deliver personal dashboards and reports straight to DMs.
* **AI Analysis**: Every chart includes an AI-generated summary highlighting trends and suggested actions.
* **Google Workspace Native**: Connects via your Google account through Clerk OAuth — no separate credentials to manage.
* **Scheduled Reports**: Set up daily, weekly, or custom schedules for chart delivery.
## Setup
Go to **Settings → Destinations** and click **Connect** next to Google Chat. This will prompt you to grant Chartcastr permission to send messages on your behalf via Google Chat.
Chartcastr requests two scopes:
* `chat.messages.create` — to send charts and analysis to spaces/DMs
* `chat.spaces.readonly` — to list available spaces for you to choose from
The Chartcastr app must be added to each Google Chat space where you want to receive pulses.
1. Open the space in Google Chat
2. Click the **space name** at the top
3. Select **Integrations & apps**
4. Click **Add apps** and search for **Chartcastr**
If you skip this step, pulses will fail with a "not a member of this space" error. Chartcastr will show a warning on the connection page if the app hasn't been added yet.
Once connected, your Google Chat spaces will appear in the destination picker when creating or editing a connection. Select the space or DM where you want charts delivered.
Pair a data source (e.g., Google Sheets, HubSpot, Shopify) with your chosen Google Chat destination. Set your preferred schedule and Chartcastr will handle the rest.
## Spaces vs Direct Messages
| Type | Description | Use Case |
| ------------------ | ---------------------------------------------- | ----------------------------------------- |
| **Space** | Shared Google Chat space with multiple members | Team dashboards, channel-wide reports |
| **Direct Message** | Private 1:1 message | Personal KPI summaries, individual alerts |
## Supported Sources
Google Chat works with all Chartcastr data sources.
Push live charts and pivot tables directly to spaces.
Deliver pipeline health, revenue, and lifecycle metrics automatically.
## Next Steps
Set up your first chart delivery in minutes.
Already on Slack? Compare with the Slack destination.
# Slack destination
Source: https://docs.chartcastr.com/integrations/destinations/slack
Connect Chartcastr to Slack to automatically deliver charts, AI summaries, and data visualizations to any channel on a recurring schedule.
## Overview
Slack integration allows you to automatically send charts and visualizations directly to your Slack channels.
## Features
* **Channel Support**: Send charts to any public or private channel the bot has access to.
* **Threaded Replies**: Keep conversations organized by threading chart updates.
* **Scheduled Reports**: Set up recurring schedules for your chart delivery.
* **Slack Canvas Context**: When enabled, Chartcastr can automatically use canvases from the destination channel as extra AI context.
## Setup
Go to Connections to connect your workspace
Learn more about Slack Webhooks
## Private Channels
By default, only public channels appear in your Chartcastr dashboard. To send charts to private channels, you need to invite the Chartcastr bot to those channels first.
### How to Add Chartcastr to a Private Channel
1. Open your Slack workspace
2. Navigate to the private channel you want to use
3. Type `/invite @Chartcastr` in the channel, or:
* Click the channel name at the top
* Select **Integrations** → **Add apps**
* Search for and add **Chartcastr**
4. Once invited, the private channel will appear in your Chartcastr dashboard
The Chartcastr bot can only see and post to channels it has been explicitly invited to. This is a Slack security feature that ensures your private channels remain private.
## Handling Slack Changes
Chartcastr automatically monitors the status of your Slack integration to ensure reliability.
## Slack Canvas Context
If you reconnect the Slack integration with the **`canvases:read`** permission, Chartcastr can automatically expose canvases from the destination Slack channel to the AI.
* No manual mapping is required
* The context is channel-specific
* Follow-up replies in Slack threads can use the same channel canvases
See how automatic Slack Canvas context works.
### App Removal
If the Chartcastr app is uninstalled from your Slack workspace or its tokens are revoked, the integration will automatically be marked as **Broken**. All connections relying on this integration will also be paused. You will need to reconnect the integration in Settings to resume.
### Channel Changes
* **Archived Channels**: If a connected channel is archived, the destination and its connections will be marked as **Broken**.
* **Deleted Channels**: Connections to deleted channels will be permanently marked as **Broken**.
* **Renamed Channels**: If you rename a channel in Slack, Chartcastr will automatically update the name in your dashboard.
## Supported Sources
Slack is the primary destination for all Chartcastr data sources.
Push live charts and pivot tables directly to channels.
Automate CRM reporting for pipeline, revenue, and lifecycle.
## Next Steps
Learn how to keep your Slack conversations organized.
Notify the right people when data updates.
# Tagging @chartcastr in Slack
Source: https://docs.chartcastr.com/integrations/destinations/slack/tagging
Tag @chartcastr in any Slack channel or pulse thread to ask follow-up questions, request deeper analysis, or get context-aware answers about your data.
You can interact with Chartcastr directly within your Slack channels by tagging `@chartcastr`.
## How it works
When you tag `@chartcastr` in a channel or thread where the bot is present, it will analyze the context of your request and reply inline.
### Thread Context
Chartcastr is context-aware. If you tag it within a thread attached to a Pulse notification, it knows *where* that pulse happened and the data associated with it. You can ask follow-up questions about the specific chart or summary in that thread.
### Inline Results
Replies are delivered inline, keeping the conversation focused and organized.
## Next Steps
Ask contextual questions about pulses in your Slack threads.
Learn how to connect Slack to your organization.
# Microsoft Teams destination
Source: https://docs.chartcastr.com/integrations/destinations/teams
Deliver scheduled charts and AI summaries to Microsoft Teams channels, and ask follow-up questions that Chartcastr answers right in the thread.
## Overview
The Microsoft Teams integration delivers your scheduled charts (Pulses) to Teams
channels as Adaptive Cards, with the AI analysis posted as threaded replies.
Reply in the pulse thread to ask a follow-up question — Chartcastr answers in
the same thread, in real time.
## Features
* **Channel delivery**: Pulses arrive as Adaptive Cards with the chart image, a
short AI summary, and highlights.
* **Threaded analysis**: The long-form analysis posts as threaded replies under
the pulse.
* **Real-time follow-ups**: Ask a question in the thread and Chartcastr replies
in the thread — no @mention required when resource-specific consent is granted.
* **Scheduled reports**: Daily, weekly, or custom schedules.
## Setup
In Chartcastr, go to **Settings → Destinations** and click **Connect** next
to Microsoft Teams. Sign in with a Microsoft admin account and grant consent
— this links the Entra tenant to your Chartcastr organisation. No per-user
sign-in is needed after this step; sending uses Chartcastr's bot identity.
Channels only appear in Chartcastr once the bot is installed in a team.
Pick one of the two paths below.
**Path A — Teams Admin Center** (tenant admin; recommended for rollouts)
1. Open the [Manage apps page](https://admin.teams.microsoft.com/policies/manage-apps).
Chartcastr appears under **All apps**.
2. Click the **Chartcastr** row → **Users and groups** tab.
3. Click **Install app** → pick the team(s) that should receive pulses → **Apply**.
If the app does not appear, your tenant admin needs to
[upload the custom app package](https://admin.teams.microsoft.com/policies/manage-apps)
first (Manage apps → **Actions → Upload new app → Upload**, then drop the
Chartcastr `.zip`).
**Path B — Teams client** (any user; fastest for a single team)
1. Open Microsoft Teams (desktop or web).
2. Left sidebar → **Apps** → **Built for your org** → **Chartcastr**.
3. **Add** → **Add to a team** → choose the destination team → **Set up a bot**.
Both paths trigger an `installationUpdate` event that captures the team and
service URL. Custom-app upload may need to be enabled tenant-wide first
([Teams Admin Center → Teams apps → Setup policies → Global](https://admin.teams.microsoft.com/policies/app-setup/edit/R2xvYmFs)
→ **Upload custom apps** = On).
From the Chartcastr app page in Manage apps, open the **Users and groups**
tab and click **Edit installs**. Choose **Everyone** to roll the app out
org-wide, or scope it to specific users/groups. This controls who can add
Chartcastr to a team — it does not auto-install it for anyone (that still
happens in the previous step, or by individual users from **Built for your
org**).
Back in Chartcastr, click the **refresh** icon next to the Channel
dropdown. Pick the channel that should receive pulses, save the destination,
and attach a source. The first pulse appears in the channel as soon as the
next schedule fires.
## What gets delivered
* **Root card**: chart image + short AI summary + highlights + a **View in
Chartcastr** button.
* **Thread replies**: the full AI analysis, split into readable sections.
## Follow-up questions
Reply in a pulse thread to ask a follow-up (for example, *"what's driving the
spike?"*). Chartcastr resolves the question against the chart and its analysis
and posts the answer in the same thread. Follow-up volume per pulse is governed
by your plan.
Seamless (no-\@mention) follow-ups require the **`ChannelMessage.Read.Group`**
resource-specific permission, which your Teams admin grants when the app is
added to a team. If RSC is not granted, **@mention the Chartcastr bot** in your
reply and it will still answer.
## Troubleshooting
* **"Add the Chartcastr app to a team first" in the channel picker**: the bot
isn't installed in any team your tenant admin has authorised yet. Follow
Step 2 above, then click the refresh icon next to the Channel dropdown.
* **No channels for a specific team**: the bot is installed in other teams but
not this one. Add it via **Apps → Built for your org → Chartcastr → Add to a
team**.
* **"Upload a custom app" option missing in Teams**: your tenant admin needs to
enable it at [Teams Admin Center → Setup policies → Global](https://admin.teams.microsoft.com/policies/app-setup/edit/R2xvYmFs)
→ **Upload custom apps** = On. Allow \~30 minutes for the policy to propagate.
* **Pulses stopped arriving**: if the app was removed from a team, the
integration is marked broken — reinstall the app and reconnect.
# WhatsApp delivery (private beta)
Source: https://docs.chartcastr.com/integrations/destinations/whatsapp
Deliver scheduled chart snapshots and AI summaries to any WhatsApp number — or group chat — via Chartcastr. Pick our shared Managed sender for zero setup, or use your own number with the Branded tier.
**Private Beta** — WhatsApp delivery is in private beta. [Contact us](mailto:support@chartcastr.com) for access to the Managed tier, or [book a Branded onboarding](https://chartcastr.com/book-a-demo) if you want messages sent from your own number.
## What you get
Push a chart image, a short AI-written read of what changed, and a deeper analysis as a threaded follow-up — straight to a WhatsApp number on your team's schedule. Built on the official **WhatsApp Business Cloud API** (no third-party bots).
Replies and emoji reactions on a delivered chart fire an AI follow-up back in the same conversation, so WhatsApp becomes a two-way channel for your data — not just a delivery pipe.
## Two tiers: Managed vs Branded
WhatsApp delivery ships in two flavors. The *sending* technology is identical (Meta Cloud API, same chart + AI pipeline) — what differs is **whose number it comes from** and **how much setup you do**.
| | **Managed** | **Branded** |
| --------------------------- | ------------------------------------------- | ----------------------------------------------------------- |
| **Sender** | Chartcastr's shared business number | Your company's own WhatsApp Business number |
| **Setup time** | \~30 seconds — one click | 1–2 weeks — we drive Meta Business verification with you |
| **What the recipient sees** | "Chartcastr" in the message header | Your brand, your verified business name |
| **Meta Developer account?** | Not needed | Yes — we walk you through it |
| **Group delivery** | Supported (once Meta GA's group send) | Supported (once Meta GA's group send) |
| **Best for** | Solo founders, small teams, internal alerts | Agencies, customer-facing delivery, branded experiences |
| **Pricing** | Bundled with any paid plan | **starting at \$85/mo per account** + per-message Meta fees |
The simplest mental model:
* **Managed** is the right default. Most teams just want charts on their phones — it doesn't matter that the sender header says "Chartcastr". You'd never set up Twilio or Meta Business Manager just to text yourself.
* **Branded** is for when your *customer* gets the message. Agencies sending client KPIs, SaaS sending account dashboards to enterprise buyers, any context where seeing "Chartcastr" in the header would feel off-brand. Worth the setup time when the recipient is paying attention to who sent it.
## Quick start — Managed
Settings → **Destinations → WhatsApp → Connect → Enable managed WhatsApp**. No credentials, no Meta Developer account. One click.
In the same dialog: **Add recipient** → set an optional label (e.g. "Sarah — CFO") → **Generate invite**. You'll see a QR code and a `wa.me/...` link with a prefilled "verify WA-XXXXXXXX" message.
* **For your own phone**: scan the QR code with your phone — WhatsApp opens with the message ready to send. Tap send. Done.
* **For a teammate**: share the link via Slack, email, or paste the prefilled message. They tap it, hit send from their own WhatsApp, and they're added.
Chartcastr never messages a phone before that phone messages us — the inbound message is the consent record Meta wants on file, and it eliminates the abuse vector of typing in someone else's number.
Add Chartcastr's WhatsApp number to a group → from inside the group, send `chartcastr link` from a phone you've already verified. The group appears in your destination picker.
WhatsApp group delivery is still in limited beta with Meta. We record linked groups now and switch deliveries on automatically once Meta enables group send.
Create a connection from any data source (Google Sheets, HubSpot, etc.) → pick the verified WhatsApp number or group → set a schedule. Done.
### Recipient confirmation notifications
When a teammate self-adds via your invite link, Chartcastr can let you know through three channels — toggle each from **Settings → WhatsApp → Settings tab → Recipient confirmation notifications**:
* **In-app** *(default on)* — toast + new row in the recipients list.
* **Email** *(default on)* — email to the admin who created the invite.
* **WhatsApp DM** *(default off)* — Chartcastr WhatsApps you on your own verified number. Useful for one-person teams; requires you to have completed your own invite first.
## Branded — talk to us
Charts delivered from **your** company's number, with **your** verified business name in the header. The setup we drive for you:
1. **Discovery (\~30 min)** — we ask about your volume, regions, message use case, and existing Meta Business assets. Drives whether you bring a number or we buy one for you.
2. **Meta Business verification** — your business gets verified inside Meta Business Manager (if it isn't already). Required for the WABA.
3. **Phone provisioning** — usually a US Twilio number (\$1.15/mo) gets verified into your new WABA, but you can bring an existing number too.
4. **System User token + handover** — we set up the long-lived API token, paste it into Chartcastr, and run an end-to-end test together.
5. **Templates** (later, if needed) — for sending outside the 24-hour customer-service window, we draft and submit utility templates to Meta for approval.
Pricing starts at **\$85/mo per account** and scales with volume + the number of Meta-side assets we maintain for you. Meta per-message fees are passed through at cost.
[Get in touch about Branded →](mailto:branded@chartcastr.com) — we usually respond within a business day. Or click **Get in touch** inside the in-app WhatsApp dialog and we'll spin up a thread.
## The 24-hour window rule
Meta only allows **free-form** business-initiated messages within 24 hours of the recipient's last inbound message.
* **Managed**: the reverse-opt-in invite tap counts as a customer-initiated message, which opens the window cleanly for the first deliveries. Subsequent replies and reactions on each pulse keep the window open indefinitely.
* **Branded**: same rule applies on your WABA. The first delivery to a brand-new recipient who's never messaged you needs an approved **Message Template** — we help you submit one during onboarding.
If a pulse fails with `error.code: 131051` or `131047`, the recipient is outside the 24-hour window. Have them text the business number once ("hi" works) to reopen it.
## Architecture
```
┌──────────────┐ chart.png + AI summary ┌────────────────────┐
│ Chartcastr │ ─────────────────────▶│ WhatsApp Cloud │
│ Pulse Run │ POST /messages │ API (graph.fb) │
└──────────────┘ └────────────────────┘
▲ │
│ X-Hub-Signature-256 │ wamid.*
│ POST /webhook/integrations/whatsapp ▼
└────── inbound reply / reaction ── recipient phone
OR group chat
```
* **Outbound**: image uploaded to `/{phoneNumberId}/media` → media ID sent in an `image` message with caption → long analysis sent as a `text` message with `context.message_id` referencing the image's `wamid` (renders as a thread).
* **Inbound**: Meta POSTs replies to `/webhook/integrations/whatsapp`. Three things happen:
* Messages containing a `WA-XXXXXXXX` invite token consume the matching invite, capture the sender's phone as a verified Destination, and send a confirmation reply.
* The literal token `chartcastr link` inside a group registers the group as a destination (group-id-keyed, scoped to the org of the verified sender — so no leaks across customers).
* Replies and reactions on a delivered chart correlate to the pulse via `context.id = wamid` and trigger an AI follow-up reply.
## Supported sources
WhatsApp works with every Chartcastr data source.
Send live KPIs to a co-founder's phone every morning.
Daily revenue snapshots to your phone.
Pipeline health pulses to the CRO.
Weekly velocity to the engineering lead.
## Limits and gotchas
* **Caption** capped at 1024 chars (Chartcastr trims with `…`).
* **Text body** (analysis) capped at 4096 chars.
* **Rate limits**: tier-based, starting at 1k unique recipients / 24h for an unverified business. Watch the [WABA quality rating](https://developers.facebook.com/docs/whatsapp/api/messages/message-templates/quality-rating).
* **Reactions** arrive as `type: reaction` events — Chartcastr treats them like a one-character reply.
* **Group send is gated on Meta** — schema and UX exist now; actual outbound to groups flips on automatically once Meta promotes group send out of limited beta.
## Troubleshooting
| Symptom | Likely cause |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `error.code: 131051` or `131047` | Recipient is outside the 24-hour window. Have them message your business number, or use a template (Branded). |
| `error.code: 190` (token expired) | **Branded only** — the System User token was revoked or expired. Ping us and we'll regenerate it in Business Manager. |
| Verification code doesn't arrive | Confirm the number is on WhatsApp (the app is installed and registered). Try **Re-send code**. |
| Webhook never fires | **Branded only** — subscribe the `messages` field on the WABA in **Configuration**, not just on the app. |
| Image fails to send | Make sure the chart URL is reachable; we fall back to `image.link` when the in-app media upload fails. |
## Next Steps
* [Connect your first source](/quickstart)
* [Set a schedule](/admin/pulses)
* [Talk to us about Branded](mailto:branded@chartcastr.com)
# Sources overview
Source: https://docs.chartcastr.com/integrations/sources
Browse all supported Chartcastr data sources including Google Sheets, Xero, Shopify, HubSpot, PostHog, and more. Learn how to connect each one.
Chartcastr supports spreadsheet, finance, CRM, analytics, ads, product, email, and practice-management data sources. Connect the source your team already uses, choose a metric, and Chartcastr will turn it into a scheduled chart with AI analysis.
Connect to Google Sheets to access charts and pivot tables
Pull revenue, orders, and customer data from your Shopify store
Group multiple sources together for unified AI analysis
Track campaign performance with automated charts
Monitor Facebook & Instagram ad performance
Track pipeline health, revenue forecasts, and lifecycle metrics
Monitor companies, people, and deal stages from Attio
Track DAU, WAU, growth accounting & user analytics
DAU/WAU/MAU, top events, saved funnels, retention & custom event overlays
Monitor privacy-friendly website analytics and traffic sources
Pulse any PromQL, SQL, or Loki metric — up to 2 per chart, with split Y-axis
Track privacy-friendly website traffic, referrers, and device mix
Report on issue velocity, cycle burndown, and team workload
Watch email send volume and delivery health trends
Track form responses, completion rates, and top-performing forms
Report on revenue, profit, cash, receivables, and payables
Monitor social engagement, impressions, and publishing cadence
Track email campaign performance, flow revenue, and audience growth
Track time, billing, revenue, expenses, and uninvoiced work
Pulse your domain authority — fully managed, no API key required
Track current NPS, response volume, and survey funnel metrics
Chart product feedback, feature requests, contacts and companies from Savio
Track event registrations, attendance, and calendar subscriber growth
Automate LinkedIn Ads reporting
## Next Steps
Start by connecting your first spreadsheet and creating your first connection.
# Amplitude source
Source: https://docs.chartcastr.com/integrations/sources/amplitude
Connect Amplitude to Chartcastr for automated DAU/WAU/MAU, top events, funnels, retention, and UTM source/medium/campaign breakdowns delivered to Slack or email.
## Overview
Use Amplitude as a data source for Chartcastr. Connect your project with an **API Key + Secret Key** and Chartcastr will pull active user metrics, top events, funnel conversion, cohort retention, custom event overlays, and **UTM-broken-down traffic** to generate charts delivered automatically to Slack or email.
Chartcastr connects with read-only access via Amplitude's Dashboard REST API — no SDK changes, no data export required.
## Setup
In Amplitude, open **Settings → Organization Settings → API and Secret Keys**. The **API Keys** tab lists each project's key — copy the key value for the project you want to chart.
Switch to the **Secret Keys** tab and click **Show** to reveal the matching secret for the same project.
Anyone with the Secret Key can query your project's data. Chartcastr stores it encrypted at rest with AES-256-GCM, but treat the key as a credential and rotate it through Amplitude if it ever leaks.
In Chartcastr, go to **New Connection** and select **Amplitude** as a source. Pick **US** or **EU** region, paste the API Key + Secret Key, and click **Test & Connect**.
**Region**: Use **US** for `amplitude.com` or **EU** for `analytics.eu.amplitude.com`. The region drives which API host we hit and is locked once connected — disconnect and reconnect to switch regions.
After connecting, Chartcastr auto-detects your pageview event by looking for common names (`[Amplitude] Page Viewed`, `Page Viewed`, `pageview`, etc.) in your top events. You can override it with any event from your project — pick **Pick a different event** in the connect modal.
Choose a chart type. Funnel metrics ask you to pick an ordered 2–5 event sequence; the Custom Events Overlay asks you to pick up to 5 events; the **UTM Traffic** and **UTM Conversion** charts ask you to pick a UTM dimension (`utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, `utm_term`) and 1–5 specific values to overlay as separate lines.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **15 pre-built Amplitude metrics** across seven categories.
DAU, WAU, MAU, new users, and a combined DAU/WAU/MAU chart for engagement tracking.
Total events, unique event users, and a stacked Top Events chart.
Total pageviews and unique pageview users using your auto-detected pageview event.
Overall conversion rate and per-step user counts for an inline 2–5 event funnel.
Average weekly cohort retention curve based on returning user activity.
Pick up to 5 events and overlay them as lines on a single chart.
Pick a UTM dimension and 1–5 specific values; we render each value as its own line on a single chart so you can compare Google vs Reddit vs Twitter (or any campaigns) at a glance.
See the full list of Amplitude metrics with chart types and descriptions.
## UTM Breakdowns
Amplitude's JS SDK automatically captures `utm_source`, `utm_medium`, `utm_campaign`, `utm_content`, and `utm_term` as event properties on every event. The **UTM Traffic** and **UTM Conversion** charts let you pick one of those dimensions and overlay up to **5 specific values** as separate lines.
* **UTM Traffic** — counts pageview events per UTM value (e.g. pageviews from `utm_source=google` vs `utm_source=reddit`).
* **UTM Conversion** — counts a chosen conversion event (e.g. `Sign Up`) per UTM value, so you can compare conversion volume across campaigns.
Pick a value list with care: with 5 lines on one chart the hard cap is what keeps it readable in a Slack post. We pull the top-50 most-frequent values per dimension so you can find rare campaigns via the search box.
## Authentication
Chartcastr uses HTTP Basic auth with your Amplitude API Key + Secret Key. The secret is encrypted at rest with AES-256-GCM. We never store project-token-style credentials — only the API key pair, which is scoped to a single Amplitude project and is read-only at the Dashboard REST API level.
## Rate Limits
Amplitude's Dashboard REST API is capped at **360 requests/hour** per project with a maximum of **6 concurrent queries**. Chartcastr's pulse cadence (daily/weekly) keeps you well below the cap. If you hit the limit you'll see a clear "rate limit hit" error in the chart preview — wait an hour and try again.
## Next Steps
Deliver Amplitude charts to your Slack channels with AI summaries in the thread.
Send pulse charts to a distribution list on the cadence that fits your team.
# Amplitude charts
Source: https://docs.chartcastr.com/integrations/sources/amplitude/available-charts
Browse all Amplitude product analytics charts in Chartcastr including DAU/WAU/MAU, top events, pageviews, funnels, retention, custom event overlays, and UTM source/medium/campaign breakdowns.
Chartcastr supports **15 pre-built Amplitude metrics** across seven categories. Each metric is delivered with an AI-generated summary tailored to product analytics.
## Active Users
| Metric | Chart Type | Description |
| ------------------------------ | ---------- | ------------------------------------------------------------- |
| **Daily Active Users (DAU)** | Bar | Unique active users per day over the last 30 days |
| **Weekly Active Users (WAU)** | Line | Rolling 7-day unique active users over the last 12 weeks |
| **Monthly Active Users (MAU)** | Line | Rolling 30-day unique active users over the last 6 months |
| **DAU / WAU / MAU** | Combo | Combined chart showing all three active user metrics together |
| **New Users** | Bar | First-time users counted by Amplitude each day |
**DAU / WAU / MAU** is the recommended starting metric — it gives a complete engagement picture in a single chart and pairs well with a daily or weekly Slack delivery.
## Events
| Metric | Chart Type | Description |
| ------------------------- | ----------- | -------------------------------------------------------- |
| **Total Events** | Bar | Total event count per day across your top events |
| **Unique Users (Events)** | Line | Unique users across your top events per day |
| **Top Events** | Stacked Bar | Your top 5 events stacked together over the last 30 days |
## Pageviews
| Metric | Chart Type | Description |
| ------------------------- | ---------- | --------------------------------------------------------------- |
| **Total Pageviews** | Bar | Total pageview count per day using your detected pageview event |
| **Unique Pageview Users** | Line | Unique users with pageviews per day |
We auto-detect a pageview event from common names (`[Amplitude] Page Viewed`, `Page Viewed`, `pageview`, etc.). Override it any time from the Amplitude section of the New Connection modal.
## Funnels
| Metric | Chart Type | Description |
| -------------------------- | ---------- | --------------------------------------------------------------------------------- |
| **Funnel Conversion Rate** | Bar | Overall conversion from the first event in your funnel to the last (last 30 days) |
| **Funnel Step Breakdown** | Bar | Per-step user counts for your funnel over the last 30 days |
Pick the ordered 2–5 event sequence that defines your funnel in the New Connection modal.
## Retention
| Metric | Chart Type | Description |
| -------------------- | ---------- | ------------------------------------------------------------------------------------- |
| **Cohort Retention** | Area | Average weekly cohort retention curve (% retained per week-offset since cohort start) |
## Custom
| Metric | Chart Type | Description |
| ------------------------- | ---------- | ----------------------------------------------------------------------- |
| **Custom Events Overlay** | Line | Pick up to 5 events and overlay them as lines on a single shared Y axis |
## UTM Breakdowns
| Metric | Chart Type | Description |
| --------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Traffic by UTM** | Multi-line | Pick a UTM dimension (utm\_source, utm\_medium, utm\_campaign, utm\_content, utm\_term) and overlay up to 5 values as separate lines — counts pageview events per value |
| **Conversion by UTM** | Multi-line | Pick a conversion event + UTM dimension; overlay up to 5 values to compare conversion volume across UTM segments |
Amplitude's JS SDK captures UTM params automatically on every event. The cap of 5 lines per chart is what keeps a Slack post readable; the value picker shows the top-50 most-frequent values per dimension and supports search for rare campaigns.
## AI-Powered Summaries
Every Amplitude chart is delivered with an AI-generated summary specific to the product metric:
* **Active Users**: engagement trends, DAU/MAU ratio (stickiness), weekly patterns, new-user momentum
* **Events / Top Events**: usage volume trends, anomaly detection, top-event mix shifts
* **Pageviews**: traffic patterns, bot detection signals, feature adoption proxy
* **Funnels**: conversion-rate movement, step drop-off changes
* **Retention**: cohort decay shape, sticky-week signals
* **Custom Events Overlay**: cross-event correlations, divergent trends
* **UTM Traffic / Conversion**: campaign performance shifts, fastest-growing source/medium, value drops to investigate
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# AppsFlyer source
Source: https://docs.chartcastr.com/integrations/sources/appsflyer
Connect AppsFlyer to Chartcastr for automated mobile attribution charts. Track installs, revenue, ROAS, in-app events, and geographic splits delivered to Slack or email.
## Overview
Use AppsFlyer as a data source for Chartcastr. Connect your AppsFlyer account with an API V2 token and create charts for installs, attribution, revenue, cost, and in-app events, then deliver them automatically to Slack or email.
Chartcastr uses the AppsFlyer Pull API v5 with **read-only** access. No data is written to your AppsFlyer account.
## Prerequisites
* An AppsFlyer account with access to **Security Center** (to generate an API V2 token)
* At least one app registered in your AppsFlyer account
## Get an API V2 Token
In AppsFlyer, go to **My account** → **Security Center** → **Manage your AppsFlyer API tokens**.
Click **+ New token**. Give it a name (e.g. "Chartcastr"), select type **API token** (not "Admin API token"), and click **Create**.
Copy the token. It will not be shown again after you navigate away. Tokens expire after 180 days — rotate them in Security Center before expiry.
All AppsFlyer API tokens issued **before 2026-03-10 19:00 UTC** were revoked by AppsFlyer. If you have an older token, generate a new one from Security Center.
## Setup
In Chartcastr, go to [Settings > Source Integrations](https://chartcastr.com/admin/settings/source/integrations) and find **AppsFlyer**. Click **Connect**, paste your API V2 token, and click **Test & Connect**. Chartcastr validates the token and imports your app list.
Pick one of your apps from the list, then choose a metric. Each metric becomes its own source. A live preview of your data will appear inline. Revenue, cost, and ROAS metrics require a Pro plan.
Pick a destination (Slack or email), set the schedule, and optionally enable AI summaries. Chartcastr will automatically generate and deliver AI-analyzed charts on your schedule.
## Available Charts
Chartcastr supports **12 pre-built AppsFlyer metrics** across five categories.
See [Available Charts](/integrations/sources/appsflyer/available-charts) for the full reference table.
### Installs (Free)
| Metric | Chart Type | Description |
| ---------------------------- | ---------- | -------------------------------------------- |
| **Daily Installs** | Line | Total installs per day over the last 30 days |
| **Installs by Media Source** | Bar | Install volume per partner/channel |
| **Organic vs Paid Installs** | Bar | Organic vs non-organic install comparison |
### Engagement (Free)
| Metric | Chart Type | Description |
| --------------------- | ---------- | ------------------------------------------------ |
| **Loyal Users Trend** | Line | Users who opened the app 3+ times, trended daily |
| **Top In-App Events** | Bar | Event count by event name |
### Geo (Free)
| Metric | Chart Type | Description |
| ------------------------------ | ----------- | ---------------------------- |
| **Installs by Country** | Bar | Install rollup by country |
| **Installs by Country / Date** | Stacked Bar | Country × date heatmap (Pro) |
### Revenue (Pro)
| Metric | Chart Type | Description |
| --------------------------- | ---------- | ------------------------------ |
| **Daily Revenue** | Line | Total revenue per day |
| **Revenue by Media Source** | Bar | Revenue attributed per partner |
### Cost (Pro)
| Metric | Chart Type | Description |
| -------------------------- | ---------- | ----------------------------------- |
| **Daily Ad Spend** | Line | Total ad spend per day |
| **Cost per Install (CPI)** | Line | Blended CPI trend |
| **ROAS by Partner** | Bar | Return on ad spend per media source |
## Troubleshooting
**"Invalid or expired API token"** — Your token may have been revoked. Go to AppsFlyer → Security Center → Manage API tokens and generate a new one.
**No apps appear after connecting** — Ensure your AppsFlyer account has at least one active app and your token has access to the Master API (`/api/mng/apps`).
**Revenue/cost metrics show locked** — These metrics require a Pro plan. [Upgrade your plan](https://chartcastr.com/pricing) to unlock them.
**Data appears 1-2 days behind** — AppsFlyer aggregate reports have a 24–48 hour processing delay. This is expected behavior from the AppsFlyer Pull API.
# AppsFlyer available charts
Source: https://docs.chartcastr.com/integrations/sources/appsflyer/available-charts
Complete reference of all 12 AppsFlyer chart specs available in Chartcastr.
## All Available Charts
Chartcastr supports **12 pre-built AppsFlyer metrics** across five categories. Revenue, cost, and ROAS metrics require a Pro plan.
| Metric ID | Name | Category | Chart Type | Plan |
| -------------------------------- | -------------------------- | ---------- | ----------- | ------- |
| `installs.overtime` | Daily Installs | Installs | Line | Free |
| `installs.byPartner` | Installs by Media Source | Installs | Bar | Free |
| `installs.organicVsPaid` | Organic vs Paid Installs | Installs | Bar | Free |
| `engagement.loyalUsers.overtime` | Loyal Users Trend | Engagement | Line | Free |
| `engagement.eventsByName` | Top In-App Events | Engagement | Bar | Free |
| `geo.installs.byCountry` | Installs by Country | Geo | Bar | Free |
| `geo.installs.heatmap` | Installs by Country / Date | Geo | Stacked Bar | **Pro** |
| `revenue.overtime` | Daily Revenue | Revenue | Line | **Pro** |
| `revenue.byPartner` | Revenue by Media Source | Revenue | Bar | **Pro** |
| `cost.overtime` | Daily Ad Spend | Cost | Line | **Pro** |
| `cost.cpi.overtime` | Cost per Install (CPI) | Cost | Line | **Pro** |
| `cost.roasByPartner` | ROAS by Partner | Cost | Bar | **Pro** |
## Chart Details
### Installs
**Daily Installs** (`installs.overtime`) — Daily install volume as a line chart over the selected date range. Pulls from the AppsFlyer daily totals report.
**Installs by Media Source** (`installs.byPartner`) — Bar chart comparing install volume across all media sources (partners) for the period. Pulls from the partners rollup report.
**Organic vs Paid Installs** (`installs.organicVsPaid`) — Bar chart comparing organic and non-organic install totals. Derived from the partners by date report, grouping by Organic vs all paid sources.
### Engagement
**Loyal Users Trend** (`engagement.loyalUsers.overtime`) — Daily loyal users (opened app 3+ times) as a line chart. Pulls from the daily totals report.
**Top In-App Events** (`engagement.eventsByName`) — Bar chart of in-app event counts by event name for the period. Pulls from the partners by date report.
### Geo
**Installs by Country** (`geo.installs.byCountry`) — Bar chart of total installs per country for the period. Pulls from the geo rollup report.
**Installs by Country / Date** (`geo.installs.heatmap`) — Stacked bar chart showing installs per country per day. Pulls from the geo by date report. **Pro plan required.**
### Revenue
**Daily Revenue** (`revenue.overtime`) — Daily total revenue as a line chart. Pulls from the daily totals report. **Pro plan required.**
**Revenue by Media Source** (`revenue.byPartner`) — Bar chart comparing total revenue attributed to each media source. Pulls from the partners rollup report. **Pro plan required.**
### Cost
**Daily Ad Spend** (`cost.overtime`) — Daily total ad spend as a line chart. Pulls from the daily totals report. **Pro plan required.**
**Cost per Install (CPI)** (`cost.cpi.overtime`) — Daily blended CPI (total cost / total installs) as a line chart. Computed from the daily totals report. **Pro plan required.**
**ROAS by Partner** (`cost.roasByPartner`) — Bar chart showing return on ad spend per media source (revenue / cost). Pulls from the partners rollup report. **Pro plan required.**
# AskNicely source
Source: https://docs.chartcastr.com/integrations/sources/asknicely
Connect AskNicely to Chartcastr for automated NPS, response volume, and survey funnel charts delivered to Slack or email.
**Paid Feature** — AskNicely is available on Chartcastr paid plans. [See pricing](https://chartcastr.com/pricing).
## Overview
Use AskNicely as a data source for Chartcastr. Connect your AskNicely account to turn your NPS programme into scheduled charts: current score, NPS trend, response volume, and survey funnel metrics.
Chartcastr connects with read-only access to the AskNicely REST API using your account subdomain and an API key.
## Setup
Your AskNicely account lives at a subdomain like `https://acme.asknice.ly`. The subdomain is the part before `.asknice.ly`.
In AskNicely, go to **Settings → API Keys** and generate a new key. Chartcastr passes this via the `X-apikey` request header on every call.
In Chartcastr, create a new source and choose **AskNicely**. Enter your subdomain and the API key. Chartcastr will validate the connection against `/api/v1/getnps/30` before saving.
Choose the AskNicely metric you want to track. Each metric becomes its own source you can route to Slack or email on any schedule.
## Available Metrics
Current 30-day NPS score, NPS trend, and promoter / passive / detractor breakdown.
Total responses, score-category bucketing, and recent score history.
Daily sent / delivered / opened / responded, response rate, and comment rate.
See the full list of AskNicely metrics with chart types and descriptions.
## How the connection works
* **Auth**: API key + subdomain. The API key is encrypted at rest using AES-256-GCM and is never sent to the browser after setup.
* **Base URL**: `https://{subdomain}.asknice.ly`
* **Endpoints used**: `/api/v1/getnps/{days}`, `/api/v1/responses/...`, `/api/v1/stats`
* **Redirects**: Chartcastr follows AskNicely's S3 redirect for large response payloads automatically.
## Disconnecting
Open **Admin → Settings → Sources → AskNicely** and click **Disconnect**. This archives all AskNicely sources for the org and revokes Chartcastr's stored credentials.
# AskNicely charts
Source: https://docs.chartcastr.com/integrations/sources/asknicely/available-charts
Browse all AskNicely NPS and customer feedback charts in Chartcastr including current NPS, NPS trend, response volume, promoter/passive/detractor breakdowns, and survey funnel metrics.
Chartcastr supports **11 pre-built AskNicely metrics** across three categories.
## NPS
| Metric | Chart Type | Description |
| --------------- | ---------- | --------------------------------------------------------------- |
| **Current NPS** | Bar | Your current NPS score for the last 30 days (from `/getnps/30`) |
| **NPS Trend** | Line | NPS score per day for the last 30 days |
## Responses
| Metric | Chart Type | Description |
| ------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------- |
| **Total Responses (30d)** | Bar | Total number of survey responses in the last 30 days |
| **Promoters / Passives / Detractors** | Bar | Count of recent NPS responses bucketed into promoters (9–10), passives (7–8), detractors (0–6) |
| **Recent NPS Scores** | Bar | Last 10 NPS scores in time order *(paid)* |
## Stats
| Metric | Chart Type | Description |
| ------------------------------------------- | ----------- | -------------------------------------------------------------------- |
| **Surveys Sent vs Delivered** | Line | Daily survey emails sent and delivered over the last 30 days |
| **Survey Funnel** | Line | Delivered / opened / responded by day (last 30 days) *(paid)* |
| **Response Rate** | Line | Surveys responded ÷ surveys sent (%) per day |
| **Promoters / Passives / Detractors Trend** | Stacked Bar | Stacked daily counts of promoters, passives, and detractors *(paid)* |
| **Daily NPS (from /stats)** | Line | Daily NPS score using the AskNicely stats endpoint |
| **Comment Rate** | Line | Percentage of responders who left a comment *(paid)* |
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Attio CRM source
Source: https://docs.chartcastr.com/integrations/sources/attio
Connect Attio CRM to Chartcastr for automated charts of your companies, people, deals, and pipeline data. Step-by-step setup and configuration.
**Paid Feature** — Attio is available on paid plans. [See pricing](https://chartcastr.com/pricing).
## Overview
Use Attio as a data source for Chartcastr. Connect your Attio workspace and create charts for company growth, people creation, and deal pipeline status, then deliver them automatically to Slack or email.
Chartcastr connects with read-only access to Attio data needed for chart generation.
## Setup
In Chartcastr, create a new source and choose **Attio**. Complete the OAuth flow to grant read access.
Choose the CRM metric you want to track. Each metric becomes its own source.
Pick a destination, set the schedule, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **7 pre-built Attio metrics** across companies, people, and deals.
Total companies, new companies over time, and companies grouped by category.
People created over time for contact acquisition tracking.
Deal count and value by status, plus deals created over time.
See the full list of Attio metrics with chart types and descriptions.
# Attio CRM charts
Source: https://docs.chartcastr.com/integrations/sources/attio/available-charts
Browse all Attio CRM charts available in Chartcastr including company growth, people added over time, deal pipeline, and record breakdowns.
Chartcastr supports **7 pre-built Attio metrics** across three categories.
## Companies
| Metric | Chart Type | Description |
| ------------------------------- | ---------- | --------------------------------------------------------------------------- |
| **Total Companies** | Bar | Total number of companies in your Attio workspace |
| **Companies Created Over Time** | Line | Weekly trend of new companies added |
| **Companies by Category** | Bar | Companies grouped by a select or status attribute such as industry or stage |
## People
| Metric | Chart Type | Description |
| ---------------------------- | ---------- | -------------------------------- |
| **People Created Over Time** | Line | Weekly trend of new people added |
## Deals
| Metric | Chart Type | Description |
| --------------------------- | ---------- | ----------------------------------------------- |
| **Deals by Status** | Funnel | Deal count grouped by status attribute |
| **Deal Value by Status** | Funnel | Total deal value grouped by status |
| **Deals Created Over Time** | Line | Weekly trend of new deals entering the pipeline |
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Microsoft Clarity source
Source: https://docs.chartcastr.com/integrations/sources/clarity
Connect Microsoft Clarity to Chartcastr for automated behavioural analytics charts — sessions, scroll depth, engagement time, rage clicks, dead clicks — delivered to Slack or email.
## Overview
Use Microsoft Clarity as a data source for Chartcastr. Connect your Clarity project with an API token and Chartcastr will pull aggregate metrics — sessions, scroll depth, engagement time, rage clicks, dead clicks — and turn them into charts delivered to Slack or email.
Clarity is a free behavioural analytics tool from Microsoft. **Chartcastr only reads the aggregate Data Export API metrics — never session recordings or heatmaps.**
**Clarity API has unusual limits.** The Data Export API caps each project at **10 requests per day** and returns one aggregated row per call (window of 1, 2, or 3 days) — there is no historical/backfill endpoint and no per-day breakdown. Chartcastr fetches yesterday's data on connect, then pulls one snapshot per day at **midnight in your organisation's timezone** and accumulates history in our database. **Your 30-day chart fills in one day at a time over the first month after connecting.**
## Setup
In Clarity, go to **Settings → Data Export → Generate new API token** ([clarity.microsoft.com](https://clarity.microsoft.com/)). Copy the JWT token — you'll need it in the next step.
Each Clarity project has its own token. Connect one Chartcastr source per Clarity project.
In Chartcastr, go to **New Source** and select **Microsoft Clarity**. Paste your API token and optionally enter a friendly project label (e.g. `example.com production`). Click **Test & Connect** to validate.
On first connect Chartcastr immediately fetches yesterday's data so you see one real data point right away. Future snapshots run daily at midnight in your organisation's timezone (configurable in **Settings → Organization**, defaults to UTC).
Choose which Clarity metric to track. Each metric becomes its own source. You can add multiple sources to send different charts on different schedules.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr exposes **19 pre-built Clarity metrics** across four categories.
Sessions, distinct users, and bot sessions per day.
Pages per session, active engagement time, and scroll depth per day.
Rage clicks, dead clicks, excessive scroll, and quickback clicks per day. UX bug detectors that other analytics tools don't surface.
Top pages (by sessions, rage clicks, or scroll depth), top browsers, devices, countries, OSes, traffic sources, and channels.
## How charts accumulate over time
Because Clarity only returns one aggregated row per call (over a 1–3 day window), Chartcastr cannot fetch a real 30-day, day-by-day chart on demand. Instead:
1. **On connect**, Chartcastr fetches yesterday's data across all 7 fetch groups so the chart has one real data point straight away. We deliberately don't pull a wider window on connect — a 3-day call would land as one inflated point, not three days of history.
2. **At midnight in your organisation's timezone**, Chartcastr's daily job pulls yesterday's data across the same 7 fetch groups (overall site totals + breakdowns by URL, browser, device, country, OS, and traffic source). The schedule honours the timezone in **Settings → Organization** (defaults to UTC).
3. **Each daily pull uses 7 of your project's 10 API requests** — leaving headroom for manual refreshes.
4. **Charts read from the accumulated snapshots in our database**, not the Clarity API. This is why a 30-day chart shows fewer days when you first connect, and fills in to its full window over the first month.
You can manually trigger a refresh from **Settings → Source Integrations**, but heavy use of "Refresh now" can exhaust your daily quota — Clarity will return 429 errors for the rest of the day and Chartcastr will skip that project until your next local midnight.
## Privacy
Chartcastr **only** reads the aggregate Data Export API. We do not access:
* Session recordings or replays
* Heatmaps
* Individual user data
The Data Export API returns aggregate counts and dimensional labels — no PII.
## API reference
Microsoft Clarity Data Export API documentation: [learn.microsoft.com/en-us/clarity/setup-and-installation/clarity-data-export-api](https://learn.microsoft.com/en-us/clarity/setup-and-installation/clarity-data-export-api).
## Next Steps
Deliver Clarity charts (with AI summaries) to your Slack channels.
Schedule Clarity behavioural reports to any inbox.
# Microsoft Clarity charts
Source: https://docs.chartcastr.com/integrations/sources/clarity/available-charts
Browse all Microsoft Clarity charts in Chartcastr — sessions, scroll depth, engagement time, rage clicks, dead clicks, and top-page breakdowns.
Chartcastr supports **19 pre-built Microsoft Clarity metrics** across four categories. Every chart is generated from aggregate Data Export API metrics — never from session recordings or heatmaps.
Clarity's Data Export API only returns the last 1–3 days of data. Chartcastr accumulates daily snapshots at 01:00 UTC, so a 30-day chart **fills in over the first month** after connecting. See [Microsoft Clarity source](/integrations/sources/clarity) for the full explanation.
## Traffic
| Metric | Chart Type | Description |
| -------------------------- | ---------- | ----------------------------------- |
| **Sessions Per Day** | Bar | Total sessions each day |
| **Distinct Users Per Day** | Bar | Unique users each day |
| **Bot Sessions Per Day** | Line | Sessions Clarity identified as bots |
## Engagement
| Metric | Chart Type | Description |
| -------------------------- | ---------- | ---------------------------------------------- |
| **Pages Per Session** | Line | Average pages viewed per session each day |
| **Active Engagement Time** | Line | Total active engagement time per day (seconds) |
| **Average Scroll Depth** | Line | Average scroll depth (%) per day |
## Frustration
These are the metrics that Clarity surfaces *better* than any other analytics tool — they're the killer reason to connect Clarity to your Slack channel.
| Metric | Chart Type | Description |
| ---------------------------- | ---------- | --------------------------------------------- |
| **Rage Clicks Per Day** | Bar | Frustrated click bursts per day |
| **Dead Clicks Per Day** | Bar | Clicks that produced no feedback |
| **Excessive Scroll Per Day** | Line | Sessions with excessive scrolling behaviour |
| **Quickback Clicks Per Day** | Line | Users who immediately returned after clicking |
**Recommended starter pulse:** *Top Pages by Rage Clicks* on a weekly schedule. It's actionable, never noisy, and immediately tells the team which page to fix next.
## Breakdowns
| Metric | Chart Type | Description |
| ----------------------------- | ---------- | -------------------------------------------- |
| **Top Pages** | Bar | Top 10 pages by session count |
| **Top Pages by Rage Clicks** | Bar | Pages with the most frustrated click bursts |
| **Top Pages by Scroll Depth** | Bar | Pages with the deepest average scroll |
| **Top Browsers** | Bar | Top 10 browsers by session count |
| **Top Devices** | Bar | Top 10 device types by session count |
| **Top Countries** | Bar | Top 10 countries by session count |
| **Top Operating Systems** | Bar | Top 10 operating systems by session count |
| **Top Traffic Sources** | Bar | Top 10 acquisition sources by session count |
| **Top Channels** | Bar | Top 10 acquisition channels by session count |
## AI-Powered Summaries
Every Clarity chart is delivered with an AI-generated summary tuned to behavioural analytics:
* **Frustration metrics:** call out which days spiked, which URLs are likely to blame, and whether the cause looks like a deploy or an external traffic shift
* **Engagement metrics:** highlight content quality drift, weekend vs weekday patterns, and significant changes in attention
* **Traffic & breakdowns:** surface acquisition mix changes and notable shifts in top pages
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# DataFast source
Source: https://docs.chartcastr.com/integrations/sources/datafast
Connect DataFast (datafa.st) to Chartcastr for automated web analytics charts covering traffic, revenue, conversions, and visitor breakdowns.
## Overview
Use [DataFast](https://datafa.st) as a data source for Chartcastr. Connect your DataFast account with an API key and Chartcastr will pull visitor metrics, revenue data, conversion rates, and traffic breakdowns to generate charts delivered automatically to Slack or email.
DataFast is a fast, privacy-focused web analytics platform. Chartcastr connects with read-only access to your site's analytics data.
## Setup
In DataFast, go to your **Site Settings → API Keys** and create a new key. Copy the key — you'll need it in the next step.
In Chartcastr, go to **New Source** and select **DataFast**. Paste your API key and click **Test & Connect** to validate the connection.
Chartcastr will verify the key by fetching your site metadata. If successful, your domain name will appear as confirmation.
Choose which analytics metric to track. Each metric becomes its own source. You can add multiple sources to send different charts on different schedules.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **8 pre-built DataFast metrics** across four categories.
Visitors per day and sessions per day over the last 30 days.
Revenue attributed to traffic sources each day.
Conversion rate trend over the last 30 days.
Top referrers, top pages, top countries, and top campaigns.
See the full list of DataFast metrics with chart types and descriptions.
## Authentication
DataFast uses **API key authentication**. Your key is encrypted with AES-256-GCM before storage and is never exposed in the Chartcastr UI — only the first 4 characters are shown for identification.
To rotate your key, go to the DataFast integration settings in Chartcastr and update the API key. Chartcastr will re-validate the new key before saving.
## Next Steps
Deliver DataFast charts to your Slack channels with AI summaries in the thread.
Schedule DataFast analytics reports to any inbox or distribution list.
# DataFast charts
Source: https://docs.chartcastr.com/integrations/sources/datafast/available-charts
Browse all DataFast charts available in Chartcastr including visitor trends, revenue over time, conversion rates, and traffic source breakdowns.
Chartcastr supports **8 pre-built DataFast metrics** across four categories. Each metric is delivered with an AI-generated summary tailored to web analytics.
## Traffic
| Metric | Chart Type | Description |
| -------------------- | ---------- | ---------------------------------------------- |
| **Visitors Per Day** | Bar | Unique visitors each day over the last 30 days |
| **Sessions Per Day** | Bar | Total sessions each day over the last 30 days |
**Visitors Per Day** is the recommended starting metric for most sites. It pairs well with a daily or weekly Slack delivery to your marketing channel.
## Revenue
| Metric | Chart Type | Description |
| ------------------- | ---------- | ------------------------------------------------------------- |
| **Revenue Per Day** | Bar | Revenue attributed to traffic sources each day (last 30 days) |
Revenue tracking requires that revenue attribution is configured in your DataFast account. If no revenue data is available, the chart will show zero values.
## Overview
| Metric | Chart Type | Description |
| ------------------- | ---------- | -------------------------------------------------- |
| **Conversion Rate** | Line | Overall conversion rate trend for the last 30 days |
## Breakdowns
| Metric | Chart Type | Description |
| ----------------- | ---------- | -------------------------------------------------------- |
| **Top Referrers** | Bar | Top 10 traffic referrers by visitor count (last 30 days) |
| **Top Pages** | Bar | Top 10 pages by visitor count (last 30 days) |
| **Top Countries** | Bar | Top 10 countries by visitor count (last 30 days) |
| **Top Campaigns** | Bar | Top 10 campaigns by visitor count (last 30 days) |
Breakdown charts show the top 10 entries ranked by visitor count. Campaign tracking uses UTM parameters (`utm_campaign`, `utm_source`) from your DataFast data.
## AI-Powered Summaries
Every DataFast chart is delivered with an AI-generated summary specific to the web analytics metric:
* **Visitors/Sessions**: traffic trends, weekend vs weekday patterns, growth signals
* **Revenue**: revenue trajectory, high/low performing days, attribution insights
* **Conversion Rate**: trend direction, notable shifts, correlation with traffic changes
* **Top Referrers**: channel mix changes, referral anomalies, new traffic sources
* **Top Pages**: content performance shifts, emerging vs declining pages
* **Top Countries**: geographic distribution changes, new audience regions
* **Top Campaigns**: campaign performance ranking, UTM parameter effectiveness
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Google Ads source
Source: https://docs.chartcastr.com/integrations/sources/google-ads
Connect Google Ads to Chartcastr for automated campaign performance charts. Track spend, clicks, conversions, and ROAS with scheduled deliveries.
**Paid Feature** — Google Ads is available on all paid plans (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Use Google Ads as a data source for Chartcastr. Connect your account via OAuth and Chartcastr will pull campaign performance metrics to generate charts delivered automatically to your destinations.
## Setup
In Chartcastr, go to **Settings → Sources** and click **Connect** next to Google Ads. You'll be redirected to Google to authorize access.
After connecting, choose which Google Ads customer account to pull data from.
Choose which performance metric to track. Each metric becomes its own source.
Pick a destination and delivery schedule, then optionally enable AI summaries.
Chartcastr requests the Google Ads OAuth scope (`https://www.googleapis.com/auth/adwords`) when you connect this source.
## Access Requirements
Google Ads account discovery depends on both OAuth scope and Google Ads account access.
* Your Google user must grant the Google Ads scope during OAuth.
* Your Google user must also have direct access to the Google Ads customer account, or direct access to a manager (MCC) account that can enumerate its child accounts.
* Seeing an account in the Google Ads web UI does not always mean the API will list it for this login. Manager hierarchies and inherited access can behave differently during account discovery.
## Troubleshooting
If Chartcastr says **No Google Ads accounts found** even though Google OAuth is connected:
1. Confirm the Google user granted Google Ads access during OAuth.
2. In Google Ads, open **Admin → Access and security** and verify that the same Google email has direct access to the advertiser account, or direct access to the relevant MCC account.
3. If access was added recently, reconnect Google Ads in Chartcastr and try again.
4. If you only have indirect visibility through someone else's manager hierarchy, the account may be visible in the Google Ads UI but still not discoverable by the API for your login.
## Available Metrics
Chartcastr supports **18 pre-built Google Ads metrics** across spend, delivery, conversions, and campaign overview.
Daily spend, CPC, CPM, ROAS, cost per conversion, and spend by campaign.
Impressions, clicks, CTR, search impression share, and impressions by campaign.
Daily conversions, conversion value, conversion rate, and campaign breakdowns.
Spend vs conversions combo chart and campaign performance comparison.
See the full list of Google Ads metrics with chart types and descriptions.
## Next Steps
Deliver Google Ads charts to your Slack channels with AI summaries.
Schedule campaign performance reports to any inbox.
# Google Ads charts
Source: https://docs.chartcastr.com/integrations/sources/google-ads/available-charts
Browse all Google Ads charts in Chartcastr including spend trends, click-through rates, conversion tracking, cost per acquisition, and campaign breakdowns.
Chartcastr supports **18 pre-built Google Ads metrics** across four categories. Each metric is delivered with an AI-generated summary tailored to paid search performance.
## Spend & Efficiency
| Metric | Chart Type | Description |
| ------------------------------------ | ---------- | --------------------------------------------------- |
| **Daily Ad Spend** ⭐ | Line | Total ad spend across all campaigns per day |
| **Cost per Click** | Line | Average cost per click per day |
| **CPM (Cost per 1,000 Impressions)** | Line | Cost per thousand impressions per day |
| **Return on Ad Spend** | Line | ROAS calculated as conversion value / spend per day |
| **Cost per Conversion** | Line | Average cost per conversion per day |
| **Spend by Campaign** | Bar | Ad spend broken down by campaign |
⭐ **Daily Ad Spend** is the recommended starting metric — it tracks budget utilisation and pairs well with a daily Slack delivery to your marketing channel.
## Delivery
| Metric | Chart Type | Description |
| --------------------------- | ---------- | ----------------------------------------------------------- |
| **Daily Impressions** | Line | Total ad impressions per day |
| **Daily Clicks** | Line | Total ad clicks per day |
| **Click-Through Rate** | Line | Percentage of impressions that resulted in a click |
| **Search Impression Share** | Line | Percentage of eligible search impressions your ads received |
| **Impressions by Campaign** | Bar | Impressions broken down by campaign |
## Conversions
| Metric | Chart Type | Description |
| -------------------------------- | ---------- | -------------------------------------------------- |
| **Daily Conversions** | Line | Total conversions per day |
| **Conversion Value** | Line | Total value from conversions per day |
| **Conversion Rate** | Line | Percentage of clicks that resulted in a conversion |
| **Conversions by Campaign** | Bar | Conversions broken down by campaign |
| **Conversion Value by Campaign** | Bar | Conversion value broken down by campaign |
## Overview
| Metric | Chart Type | Description |
| ----------------------------------- | ---------- | -------------------------------------------------------------- |
| **Spend vs Conversions** | Combo | Daily spend with conversion overlay |
| **Campaign Performance Comparison** | Bar | Compare spend, clicks, and conversions across active campaigns |
## AI-Powered Summaries
Every Google Ads chart is delivered with an AI-generated summary specific to the ad performance metric:
* **Spend**: budget pacing, day-of-week patterns, unexpected spikes
* **ROAS/CPC**: efficiency trends, cost inflation signals, campaign-level outliers
* **Conversions**: volume trends, conversion rate shifts, campaign attribution
* **Impression Share**: competitive pressure signals, budget-limited vs rank-limited
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Google Search Console source
Source: https://docs.chartcastr.com/integrations/sources/google-search-console
Connect Google Search Console to Chartcastr for automated SEO charts. Track clicks, impressions, CTR, and search position with scheduled reports.
**Paid Feature** — Google Search Console is available on all paid plans (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Use Google Search Console as a data source for Chartcastr. Connect your Google account, grant read-only Search Console access, and Chartcastr will pull SEO performance data to generate charts delivered automatically to your destinations.
Chartcastr connects with **read-only access** — it can only view your search performance data, never modify your properties.
## Setup
In Chartcastr, go to [Settings → Sources](https://chartcastr.com/admin/settings) and find **Google Search Console**. Click **Grant Access** to approve the additional `webmasters.readonly` OAuth scope. This uses your existing Google sign-in — no API keys or service accounts needed.
When creating a new source, choose which Search Console property (domain or URL prefix) you want to report on. All properties your Google account has access to will be listed.
Pick one of the 7 available metric types. Each metric becomes its own source — you can add multiple metrics across different properties.
Go to [Connections](https://chartcastr.com/admin/connections) → **New Connection**. Select your Search Console source, pick a destination (Slack, Teams, or email), and set the delivery frequency. Daily or weekly cadences work best for SEO data.
## Available Metrics
Chartcastr supports **7 pre-built Search Console metrics** across performance trends and rankings.
Daily performance (clicks + impressions), clicks, impressions, CTR, and average position by day.
Top 10 pages and top 10 queries by click count.
See the full list of Search Console metrics with chart types and descriptions.
## Permissions
Search Console properties have different permission levels that affect what data is available:
| Permission | Access Level |
| -------------- | ------------------------------------------------ |
| **Owner** | Full access to all data and settings |
| **Full** | Can view all data including internal links |
| **Restricted** | Can view most data except some sensitive reports |
| **Unverified** | Limited access — may not have full data |
You can verify your permission level on the [Search Console settings page](https://chartcastr.com/admin/settings/source/search-console) in Chartcastr.
## Managing Properties
Visit [Settings → Sources → Google Search Console](https://chartcastr.com/admin/settings/source/search-console) to see:
* All accessible properties and your permission level for each
* Which sources and connections are linked to each property
* Whether any properties have become inaccessible (e.g., permissions were revoked)
## Next Steps
Deliver SEO charts to your Slack channels with AI summaries in the thread.
Schedule SEO performance reports to any inbox or distribution list.
# Google Search Console charts
Source: https://docs.chartcastr.com/integrations/sources/google-search-console/available-charts
Browse all Search Console charts in Chartcastr including click trends, impression volume, average CTR, position tracking, and top pages or queries.
Chartcastr supports **7 pre-built Google Search Console metrics** for tracking SEO performance. Each metric is delivered with an AI-generated summary tailored to search analytics.
## Performance Trends
| Metric | Chart Type | Description |
| --------------------------- | ---------- | -------------------------------------------- |
| **Daily Performance** ⭐ | Line | Clicks and impressions over the last 28 days |
| **Clicks by Day** | Line | Total clicks per day |
| **Impressions by Day** | Area | Total impressions per day |
| **CTR by Day** | Line | Click-through rate percentage by day |
| **Average Position by Day** | Line | Average search ranking position over time |
⭐ **Daily Performance** is the recommended starting metric — it shows clicks and impressions together, giving a complete picture of search visibility and engagement in one chart.
Search Console data has a **3-day processing delay** from Google. Chartcastr automatically accounts for this — charts show the most recent 28 days of available data.
## Top Rankings
| Metric | Chart Type | Description |
| ------------------------- | ---------- | ------------------------------------------- |
| **Top Pages by Clicks** | Bar | Your top 10 performing pages by click count |
| **Top Queries by Clicks** | Bar | Your top 10 search queries by click count |
## AI-Powered Summaries
Every Search Console chart is delivered with an AI-generated summary specific to the SEO metric:
* **Daily Performance**: click/impression trends, seasonality, algorithm update impact
* **CTR**: click-through rate shifts, ranking position vs CTR correlation
* **Average Position**: ranking movement direction, pages gaining/losing position
* **Top Pages**: traffic concentration, emerging vs declining pages
* **Top Queries**: branded vs non-branded mix, new query opportunities
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Google Sheets source
Source: https://docs.chartcastr.com/integrations/sources/google-sheets
Connect Google Sheets to Chartcastr to share premade charts or build visualizations from raw data ranges. Automate delivery to Slack, Teams, or email.
## Overview
Use Google Sheets as a data source for Chartcastr. Your Google Drive houses your spreadsheets, and Chartcastr can access them to fetch charts and create visualizations to connect with your destinations.
## Methods
Chartcastr offers two ways to use Google Sheets as a source:
Use existing charts from your spreadsheet — Chartcastr reads the configuration and renders beautiful visuals
Select a data range and configure the chart settings directly in Chartcastr (Coming Soon)
| Method | Best For | Data Privacy | Flexibility |
| --------------------- | ------------------------------------ | ----------------- | ---------------------------------------- |
| **Premade Charts** | Already have charts in Google Sheets | ✅ Private (OAuth) | **High** - Changes in Sheet auto-reflect |
| **Custom Data Range** | Want to create charts from raw data | ✅ Private (OAuth) | **Medium** - May require manual updates |
**Pro Tip**: Premade Charts are highly flexible. If you change labels, data ranges, grouping, or titles in Google Sheets, Chartcastr will automatically register and reflect those changes in your next pulse. Custom Data Ranges are less flexible and may require more manual configuration effort if your source data structure changes significantly.
## Authentication
Connect your Google account to Chartcastr with OAuth. The authenticated account must have at least **Viewer** permissions on the sheets you want to access.
This is the Google account you use to log in to Chartcastr.
## Power Up with AI Context
Provide deep background information for AI analysis by linking external documents directly to your Google Sheets source.
Learn how to add custom notes and documents to improve AI insights.
Share context across multiple sheets efficiently.
## Common Pairings
Google Sheets data is most powerful when delivered to where your team already communicates.
The perfect companion for high-frequency data pulses.
Seamlessly deliver charts to your Teams channels.
# Custom data range charts
Source: https://docs.chartcastr.com/integrations/sources/google-sheets/custom-data-range
Create Chartcastr visualizations from raw Google Sheets data ranges. Define cell ranges, choose chart types, and schedule automated deliveries.
**Coming Soon** — This feature is currently in development.
## Overview
Custom Data Range allows you to select any data range from your Google Sheets and configure chart settings directly in Chartcastr — without needing to create a chart in Google Sheets first.
## Planned Features
* **Select any data range**: Choose cells, rows, or columns from your spreadsheet
* **Configure headers and series**: Define which columns are labels, values, or groups
* **Multiple chart types**: Bar, line, area, pie, scatter, and more
* **Custom styling**: Colors, legends, axis labels, and formatting
* **Keep data private**: Uses OAuth authentication — no public publishing required
## Use Cases
* Create visualizations from raw data tables
* Combine multiple ranges into a single chart
* Apply custom styling not available in Google Sheets
* Build charts from data that doesn't have a chart yet
## Example Configuration
```yaml theme={null}
# Example configuration (conceptual)
dataRange: "Sheet1!A1:D20"
headers:
row: 1
series:
- column: B
name: "Revenue"
type: bar
- column: C
name: "Expenses"
type: bar
- column: D
name: "Profit"
type: line
labels:
column: A
```
Want early access? Let us know you're interested!
## Next Steps
Use existing charts from your spreadsheet
See what's coming next
# Premade Google Sheets charts
Source: https://docs.chartcastr.com/integrations/sources/google-sheets/premade-charts
Import existing charts from your Google Sheets spreadsheets into Chartcastr. Select specific charts and schedule automated delivery to your team.
## Overview
Extract existing chart configurations from your Google Sheets and render them beautifully with Chartcastr's advanced charting engine. Your data stays private and secure.
**Recommended** — This is the best option for most use cases. Reuses your existing chart configurations while keeping data private.
## How It Works
1. Connect your Google account to Chartcastr
2. Select a spreadsheet from your Google Drive
3. Choose an existing chart from the spreadsheet
4. Chartcastr automatically:
* Extracts the chart configuration (type, colors, axes, series, etc.)
* Pulls the data from the specified ranges
* Renders a beautiful chart using Recharts
5. Save as a source and connect to your destinations
## Features
* ✅ **Private Data**: Keep your spreadsheets private — no need to publish publicly
* ✅ **Full Configuration**: Preserves chart type, colors, axis titles, legends, and stacking
* ✅ **Multiple Chart Types**: Supports bar, line, area, pie, and scatter charts
* ✅ **Live Preview**: See exactly how your chart will look before saving
* ✅ **OAuth Authentication**: Secure access using your Google account
* ✅ **Auto-sync**: Data, ranges, grouping, and styling update automatically when your spreadsheet changes
## Automatic Reflection of Changes
One of the key benefits of using **Premade Charts** is that Chartcastr automatically registers changes made within your spreadsheet. If you perform any of the following in Google Sheets:
* **Update Data**: Add new rows or change existing values
* **Adjust Ranges**: Expand or shrink the data ranges assigned to the chart
* **Change Grouping**: Modify how data is aggregated or categorized
* **Formatting**: Update chart titles, legend positions, or series colors
These changes will be automatically detected and reflected in Chartcastr. This provides a much more flexible experience than **Custom Data Ranges**, which may require manual adjustments if your data structure changes significantly.
## Supported Chart Types
Chartcastr supports the following Google Sheets chart types:
| Google Sheets Type | Rendered As | Notes |
| ------------------ | ----------- | ----------------- |
| Column Chart | Bar Chart | Vertical bars |
| Bar Chart | Bar Chart | Horizontal bars |
| Line Chart | Line Chart | Standard lines |
| Area Chart | Area Chart | Filled areas |
| Stepped Area Chart | Area Chart | Unified with area |
| Scatter Chart | Scatter | Scatter plot |
| Pie Chart | Pie Chart | Pie/donut charts |
| Combo Chart | Line Chart | Defaults to line |
### Unsupported Chart Types
The following are detected but not currently supported:
* Candlestick, Histogram, Bubble, Waterfall
* Treemap, Org Chart, Scorecard
* Geographic/region charts
Let us know if you'd like to see a specific chart type supported.
## Setup Steps
If you haven't already, create the chart you want to share in your spreadsheet.
Go to [Sources](https://chartcastr.com/admin/sources), select **Google Sheets**, and search for your spreadsheet.
Choose the chart you want to use from the Charts section.
Review the chart preview, then save as a source and connect to destinations.
## Published Chart URLs (Alternative)
If you prefer, you can also use a published chart URL. This requires making the chart publicly accessible.
1. Open your Google Sheet and select the chart
2. Click the three-dot menu → **Publish chart**
3. Set to **Image** format and **Anyone on the internet can view**
4. Copy the URL and paste into Chartcastr
Published charts must be fully public. Restricted charts (requiring sign-in) are not supported due to Google limitations.
```bash Example URL theme={null}
https://docs.google.com/spreadsheets/d/e/2PACX-.../pubchart?oid=123456789&format=image
```
## Next Steps
Send your charts to Slack channels
Link sources to destinations
# Grafana source
Source: https://docs.chartcastr.com/integrations/sources/grafana
Connect Grafana to Chartcastr and pulse any PromQL, SQL, or Loki metric to Slack or email — line or bar chart, with optional split Y-axis.
## Overview
Use Grafana as a data source for Chartcastr. Connect your Grafana host (self-hosted or Grafana Cloud) with a service-account token and Chartcastr will execute queries against your existing datasources — Prometheus, Loki, MySQL, Postgres, InfluxDB, and more — and chart the result.
Each Chartcastr source can pulse **up to two metrics** rendered as a line or bar chart. When two metrics have very different scales (say request rate at 5,000/s and error percentage at 0–5%), flip on the **split Y-axis** option to keep both legible.
Grafana metrics are user-defined — there is no preset metric list like Plausible or PostHog. You supply the query expression that Grafana itself would run.
## Setup
In your Grafana Cloud stack, go to **Administration → Users and access → Service accounts**. You can find it quickly by pressing `Cmd+K` (or `Ctrl+K`) and searching for "service".
Click **Add service account**, give it a name (e.g. `chartcastr-integration`), and set the role to **Viewer**. Viewer access is all Chartcastr needs — it only reads metric data.
In your Grafana instance, go to **Administration → Users and access → Service accounts**. You can find it quickly by pressing `Cmd+K` (or `Ctrl+K`) and searching for "service".
Click **Add service account**, give it a name (e.g. `chartcastr-integration`), and set the role to **Viewer**. Viewer access is all Chartcastr needs — it only reads metric data.
Service accounts require **Grafana 8.5 or later**. If you're on an older version, upgrade before proceeding or use a basic-auth API key instead (contact support).
Click into the service account you just created, then click **Add service account token**.
Give the token a display name and set an **expiration date**. We recommend **1 year** — long enough to avoid frequent rotation, short enough to limit exposure if the token is ever compromised. Copy the generated `glsa_...` token; you won't be able to view it again.
Store the token somewhere safe before closing the dialog. Grafana only shows it once.
In Chartcastr, go to **New Source** and select **Grafana**. Enter:
* **Grafana host** — the full URL of your Grafana instance
Your Grafana Cloud URL looks like `https://yourorg.grafana.net`. Find it in the Grafana Cloud portal under your stack details.
Use the URL your team browses to — e.g. `https://grafana.example.com` or `http://localhost:3000` for local setups. Make sure the host is reachable from the internet (Chartcastr's servers need to reach it).
* **Service account token** — the `glsa_...` token from the previous step
Click **Test & Connect** to validate the connection.
Chartcastr loads the list of datasources available to your service account. Pick the one your metric lives in (Prometheus, Loki, your SQL database, etc.).
Paste the query expression for your metric — PromQL for Prometheus, LogQL for Loki, raw SQL for SQL datasources. Add an optional label to use in the legend.
Example PromQL:
```promql theme={null}
sum(rate(http_requests_total{job="api"}[5m]))
```
Example LogQL:
```logql theme={null}
sum(count_over_time({app="api"} |= "ERROR"[5m]))
```
Click **Add second metric** to overlay a second series on the same chart. If the two metrics have very different ranges, enable **Split Y-axis** so each gets its own scale.
Choose **Line** or **Bar**, then pick how far back to look (1 hour, 6 hours, 24 hours, 7 days, or 30 days).
Click **Preview chart** to see what the rendered chart looks like with live data. Save the source, then create a connection to your Slack channel or email destination.
## Supported datasource types
Chartcastr's Grafana integration runs queries via Grafana's `/api/ds/query` endpoint, which supports any datasource installed in your Grafana — including:
* **Prometheus** (PromQL)
* **Loki** (LogQL)
* **MySQL / Postgres / MSSQL** (SQL)
* **InfluxDB** (InfluxQL / Flux)
* **ClickHouse**
* Any community datasource plugin that accepts a `query` field
## Notes
* **Only integer metrics**: values are rounded to integers. This is fine for counts and rates but means decimal-precision metrics (e.g. 0.823 ratios) will lose precision.
* **Time-series only**: queries must return a time-series shape. Single-value (instant) queries are not yet supported.
* **Service-account token is encrypted**: stored AES-256-GCM-encrypted at rest, never exposed back to the client.
* **Self-hosted reachability**: Chartcastr's servers must be able to reach your Grafana host over HTTPS. If your Grafana is behind a private network or VPN, use Grafana Cloud or expose it via a reverse proxy with a valid TLS certificate.
# Harvest source
Source: https://docs.chartcastr.com/integrations/sources/harvest
Connect Harvest to Chartcastr for automated time tracking, billing, and expense charts. Monitor team hours, revenue, and uninvoiced work over time.
**Paid Feature** — Harvest is available on paid plans. [See pricing](https://chartcastr.com/pricing).
## Overview
Use Harvest as a data source for Chartcastr. Connect your Harvest account and create charts for time tracking, billing, revenue, and expenses, then deliver them automatically to Slack or email.
Chartcastr connects with **read-only** OAuth access to your Harvest account. No write permissions are requested, and no data is stored between runs.
## Prerequisites
* A Harvest account with **administrator access** (required to authorize the OAuth connection)
* A paid Chartcastr plan ([see pricing](https://chartcastr.com/pricing))
## Setup
In Chartcastr, go to [Settings > Source Integrations](https://chartcastr.com/admin/settings/source/integrations) and find **Harvest**. Click **Connect** and complete the OAuth flow. You will be redirected to Harvest to authorize access.
Choose the time tracking or billing metric you want to track. Each metric becomes its own source. A live preview of your data will appear inline.
Pick a destination (Slack or email), set the schedule, and optionally enable AI summaries. Chartcastr will automatically generate and deliver AI-analyzed charts on your schedule.
## Available Charts
Chartcastr supports **10 pre-built Harvest metrics** across four categories: time tracking, revenue, expenses, and uninvoiced work.
### Time Tracking
| Metric | Chart Type | Description |
| ---------------------------- | ---------- | ---------------------------------------------- |
| **Hours by Client** | Bar | Total tracked hours broken down by client |
| **Hours by Project** | Bar | Total tracked hours broken down by project |
| **Hours by Team Member** | Bar | Total tracked hours broken down by team member |
| **Hours by Task** | Bar | Total tracked hours broken down by task type |
| **Billable vs Non-Billable** | Combo | Billable and non-billable hours over time |
### Revenue
| Metric | Chart Type | Description |
| ---------------------- | ---------- | -------------------------------------- |
| **Revenue by Client** | Bar | Billable amount broken down by client |
| **Revenue by Project** | Bar | Billable amount broken down by project |
### Expenses
| Metric | Chart Type | Description |
| ------------------------ | ---------- | ---------------------------------------------- |
| **Expenses by Category** | Bar | Total expenses broken down by expense category |
| **Expenses by Project** | Bar | Total expenses broken down by project |
### Uninvoiced
| Metric | Chart Type | Description |
| ------------------------- | ---------- | ----------------------------------------- |
| **Uninvoiced by Project** | Bar | Uninvoiced amounts broken down by project |
See the full list with descriptions and recommended use cases.
## Date Range
Time-series metrics use the **last 12 weeks** of data by default.
## Authentication
Harvest uses OAuth 2.0 for secure authentication. Chartcastr requests read-only access to:
* Time entries and timesheets
* Projects and tasks
* Clients
* Users and team members
* Invoices and expenses
Tokens are automatically refreshed in the background. Access tokens expire after 18 hours and are proactively refreshed. Refresh tokens are valid for 30 days. If a token becomes invalid, you'll be prompted to reconnect.
## FAQ
Harvest OAuth grants access to a single account per connection. The account is identified by the Harvest Account ID selected during authorization.
Data is fetched fresh from Harvest every time a pulse fires. Chartcastr does not cache or store your Harvest data between runs.
Time-series metrics use the last 12 weeks of data by default.
No. Chartcastr fetches data on-demand when a pulse fires, generates the chart and AI summary, delivers it to your destination, and discards the raw data. Only the rendered chart image and summary text are retained as part of the pulse delivery history.
## Next Steps
See every time tracking, revenue, expense, and uninvoiced metric available for charting.
Set up automated chart delivery from Harvest to Slack or email.
Browse all available data source integrations.
# Harvest charts
Source: https://docs.chartcastr.com/integrations/sources/harvest/available-charts
Browse all Harvest charts in Chartcastr including billable hours over time, project revenue, expense tracking, and uninvoiced amount trends.
Chartcastr supports **10 pre-built Harvest metrics** across four categories. All metrics are delivered as **timeseries charts** with weekly data points, enabling week-over-week and month-over-month trend analysis.
## Time Tracking
| Metric | Description |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| **Hours by Client** | Weekly hours tracked per client over time — see where your team spends time and spot shifts in client allocation |
| **Hours by Project** | Weekly hours tracked per project over time — compare project effort and catch scope creep early |
| **Hours by Team Member** | Weekly hours tracked per team member over time — monitor utilization and workload balance |
| **Hours by Task** | Weekly hours tracked per task type over time — understand how work distribution changes week-over-week |
| **Billable vs Non-Billable** | Billable and non-billable hours per week over time — track utilization rate trends |
## Revenue
| Metric | Description |
| ---------------------- | ------------------------------------------------------------------------------------------------ |
| **Revenue by Client** | Weekly billable revenue per client over time — identify your top revenue sources and spot trends |
| **Revenue by Project** | Weekly billable revenue per project over time — compare project profitability week-over-week |
## Expenses
| Metric | Description |
| ------------------------ | ----------------------------------------------------------------------------------------- |
| **Expenses by Category** | Weekly expense totals by category over time — track spending patterns and catch anomalies |
| **Expenses by Project** | Weekly expense totals by project over time — monitor project costs and budget adherence |
## Uninvoiced
| Metric | Description |
| ------------------------- | -------------------------------------------------------------------------------------------------- |
| **Uninvoiced by Project** | Uninvoiced hours and expenses per project — catch unbilled work before it slips through the cracks |
## AI Analysis
Every chart delivery includes AI-powered analysis that highlights:
* **Week-over-week changes** — what moved and by how much
* **Month-over-month trends** — longer-term patterns in your data
* **Anomalies** — unusual spikes or drops worth investigating
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# HubSpot CRM source
Source: https://docs.chartcastr.com/integrations/sources/hubspot
Connect HubSpot CRM to Chartcastr for automated charts of your sales pipeline, deal stages, contact lifecycle, and revenue. Setup guide included.
## Overview
Chartcastr connects to your HubSpot portal to pull CRM metrics — pipeline health, deal velocity, revenue forecasts, lifecycle funnels, and more — and delivers them as automated charts to Slack or email with AI-powered analysis.
Chartcastr connects with **read-only** access to your HubSpot portal. No write permissions are requested, and no CRM data is stored between runs.
HubSpot integration is available on **all paid plans**. [See pricing](https://chartcastr.com/pricing) or [sign up](https://chartcastr.com/sign-up) to get started.
## Install & Connect
[Sign up](https://chartcastr.com/sign-up) with your Google account, then start a Starter or Pro trial to unlock premium integrations including HubSpot.
Go to [Settings → Source Integrations](https://chartcastr.com/admin/settings/source/integrations) and find **HubSpot CRM**.
Click **Connect** and complete the OAuth flow. You will be redirected to HubSpot to select which account to connect.
After selecting your account, review the requested permissions and click **Connect app**.
After authorizing, you'll be redirected back to Chartcastr. The integration status will show as **Active**.
## Configure a HubSpot Source
Once connected, you can create chart sources from your HubSpot data.
Go to [Connections](https://chartcastr.com/admin/connections) and click **New Connection**. Select **HubSpot CRM** as your source type.
Browse the available metrics organized by category (Pipeline, Contacts, Revenue). Select the metric you want to track — a live preview of your data will appear inline.
Select where you want your chart delivered:
* **Email** — quickest way to get started, delivered to your inbox
* **Slack** — post charts directly to a team channel with AI summaries and interactive follow-up questions
Configure how often you'd like to receive your pulse (daily, weekly, etc.) and save. Chartcastr will automatically generate and deliver AI-analyzed charts on your schedule.
You can add multiple HubSpot sources to send different metrics on different schedules. A common setup is a **Pipeline Summary** every Monday morning to Slack, plus a **Closed-Won Revenue** chart weekly to the leadership email group.
## Use the App
Once a connection is created, Chartcastr works automatically:
* **Scheduled delivery** — Charts are generated and delivered on your configured schedule. Data is fetched fresh from HubSpot every time a pulse fires.
* **AI-powered analysis** — Every chart comes with an AI-generated summary tailored to the specific CRM metric, highlighting trends, anomalies, and actionable insights.
* **Follow-up questions** — In Slack, you can ask follow-up questions about your chart directly in the thread. The AI uses your chart data as context to answer.
* **Manual triggers** — You can trigger any pulse on-demand from the [Connections](https://chartcastr.com/admin/connections) page without waiting for the next scheduled run.
No manual actions are required for ongoing use. Charts are generated and delivered automatically.
## Available Charts
Chartcastr supports **10 pre-built HubSpot metrics** across three categories, designed for RevOps and sales leaders.
### Pipeline & Deals
| Metric | Chart Type | Description |
| ------------------------------ | ----------------- | ------------------------------------------------------ |
| **Pipeline Summary** | Combo (dual axis) | Deal count and total value by pipeline stage |
| **Deals Created Over Time** | Line | Weekly trend of new deals entering the pipeline |
| **Closed-Won Revenue** | Bar | Weekly closed-won deal revenue |
| **Deal Velocity by Stage** | Bar | Average days deals spend in each pipeline stage |
| **Weighted Pipeline Forecast** | Combo | Weighted deal value by stage probability vs closed-won |
| **Top Deal Loss Reasons** | Bar | Most common reasons deals are lost |
### Contacts & Lifecycle
| Metric | Chart Type | Description |
| -------------------------- | ---------- | --------------------------------------------------------------------------- |
| **Lifecycle Stage Funnel** | Bar | Contact count by lifecycle stage (Subscriber → Lead → MQL → SQL → Customer) |
| **New Contacts Over Time** | Line | Weekly new contacts created |
### Revenue Attribution
| Metric | Chart Type | Description |
| --------------------------- | ----------- | ----------------------------------------------- |
| **Revenue by Deal Owner** | Bar | Closed-won revenue attributed to each sales rep |
| **Pipeline Stage Movement** | Stacked Bar | Deal value entering each stage over time |
See the full list with AI analysis examples and recommended use cases.
## Data & Permissions
Chartcastr requests the following HubSpot OAuth scopes — all **read-only**:
| Scope | Purpose |
| --------------------------- | ---------------------------------------------------- |
| `crm.objects.deals.read` | Read deal records (amount, stage, close date, owner) |
| `crm.objects.contacts.read` | Read contact records (lifecycle stage, create date) |
| `crm.schemas.deals.read` | Read deal pipeline and stage definitions |
| `crm.objects.owners.read` | Read owner/rep names for revenue attribution |
| `oauth` | Required base scope for OAuth flow |
### What data does Chartcastr access?
* **Deals**: Deal name, amount, stage, pipeline, create date, close date, owner, loss reason, and stage probability.
* **Contacts**: Lifecycle stage and create date.
* **Pipelines**: Pipeline names, stage names, display order, and probability metadata.
* **Owners**: First name, last name, and email for deal attribution.
Chartcastr does **not** access or store emails, notes, call recordings, or any engagement data. Data is fetched on-demand when a pulse fires and is not cached between runs.
## Disconnect from Chartcastr
To disconnect your HubSpot portal from Chartcastr:
1. Go to [Settings → Source Integrations](https://chartcastr.com/admin/settings/source/integrations).
2. Find **HubSpot CRM** and click **Disconnect**.
3. Confirm the disconnection.
### What happens when you disconnect
* **Scheduled pulses stop** — Any connections using HubSpot sources will stop delivering. The connections remain configured but will show an error status until reconnected.
* **Existing charts are preserved** — Charts and AI summaries that have already been delivered to Slack or email remain in those destinations. Nothing is deleted retroactively.
* **No data is retained** — Chartcastr does not store your HubSpot CRM data between pulse runs, so there is no data to clean up on our side.
* **You can reconnect at any time** — Re-authorizing via OAuth will restore your existing connections and resume scheduled deliveries.
## Uninstall from HubSpot
To fully remove Chartcastr from your HubSpot portal, follow the steps in [HubSpot's guide to disconnecting apps](https://knowledge.hubspot.com/integrations/connect-apps-to-hubspot). This revokes Chartcastr's OAuth tokens and removes the app from your HubSpot Connected Apps list.
Uninstalling from HubSpot has the same consequences as disconnecting from Chartcastr (above). No CRM data is retained by Chartcastr, and previously delivered charts remain in your Slack channels and email inboxes.
## FAQ
HubSpot OAuth grants access to a single portal per connection. If you have multiple HubSpot portals, you can connect each one separately by repeating the OAuth flow.
By default, Chartcastr uses your **default deal pipeline** (the first pipeline returned by HubSpot). Support for selecting specific pipelines is coming soon.
Data is fetched fresh from HubSpot every time a pulse fires. Chartcastr does not cache or store your CRM data between runs.
Time-series metrics (deals over time, contacts over time, etc.) use the last 12 weeks of data by default.
No. Chartcastr fetches data on-demand when a pulse fires, generates the chart and AI summary, delivers it to your destination, and discards the raw CRM data. Only the rendered chart image and summary text are retained as part of the pulse delivery history.
## Next Steps
Send HubSpot charts to Slack channels with AI summaries and follow-up questions.
Email HubSpot charts with AI-powered analysis on a schedule.
# HubSpot CRM charts
Source: https://docs.chartcastr.com/integrations/sources/hubspot/available-charts
Browse all HubSpot CRM charts in Chartcastr including deal pipeline stages, contact lifecycle, revenue trends, and deal owner performance breakdowns.
Chartcastr supports **10 pre-built HubSpot metrics** across three categories. Each metric maps to a specific chart type and is delivered with an AI-generated summary tailored to that CRM indicator.
## Pipeline & Deals
Pipeline metrics are sourced from your HubSpot **deal records** and **pipeline schema**, covering the last 12 weeks by default.
| Metric | Chart Type | Description |
| ------------------------------ | ----------------- | -------------------------------------------------------------------------------------- |
| **Pipeline Summary** ⭐ | Combo (dual axis) | Deal value as bars (left axis) and deal count as a line (right axis) by pipeline stage |
| **Deals Created Over Time** | Line | Weekly new deals entering the pipeline |
| **Closed-Won Revenue** | Bar | Weekly closed-won deal revenue |
| **Deal Velocity by Stage** | Bar | Average days deals spend in each stage |
| **Weighted Pipeline Forecast** | Combo | Weighted value by stage probability vs closed revenue |
| **Top Deal Loss Reasons** | Bar | Most common reasons deals are lost |
⭐ **Pipeline Summary** is the recommended starting metric for most HubSpot users. It gives an immediate view of pipeline health and pairs well with a weekly Monday delivery to your sales Slack channel.
## Contacts & Lifecycle
Contact metrics are sourced from your HubSpot **contact records**, using lifecycle stage and create date.
| Metric | Chart Type | Description |
| -------------------------- | ---------- | --------------------------------------------------------------------------- |
| **Lifecycle Stage Funnel** | Funnel | Contact count by lifecycle stage (Subscriber → Lead → MQL → SQL → Customer) |
| **New Contacts Over Time** | Line | Weekly new contacts created |
The lifecycle funnel is especially useful for marketing and RevOps teams to monitor conversion health between stages. If any stage shows a growing backlog relative to downstream stages, the AI summary will flag the bottleneck.
## Revenue Attribution
Revenue metrics are sourced from **closed-won deals** with owner and stage data.
| Metric | Chart Type | Description |
| --------------------------- | ----------- | ----------------------------------------------------- |
| **Revenue by Deal Owner** | Bar | Closed-won revenue per sales rep — a leaderboard view |
| **Pipeline Stage Movement** | Stacked Bar | Deal value entering each stage over time |
## AI-Powered Summaries
Every HubSpot chart is delivered with an AI-generated summary specific to the CRM metric. The AI is given context about what each indicator means and what to look for — for example:
* **Pipeline Summary**: stage distribution health, value vs count imbalances, deals stuck in early stages, pipeline value concentration
* **Deal Velocity**: stages with above-average dwell time, bottleneck identification
* **Closed-Won Revenue**: week-over-week revenue momentum, quota attainment signals
* **Weighted Forecast**: forecast accuracy trends, stage probability calibration
* **Loss Reasons**: emerging patterns in deal losses, competitive or pricing signals
* **Lifecycle Funnel**: conversion rates between stages, MQL-to-SQL bottlenecks
* **Revenue by Owner**: rep performance distribution, capacity planning signals
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Klaviyo source
Source: https://docs.chartcastr.com/integrations/sources/klaviyo
Connect Klaviyo to Chartcastr for automated email marketing charts. Track open rates, click rates, revenue per email, and audience growth over time.
**Paid Feature** — Klaviyo is available on paid plans. [See pricing](https://chartcastr.com/pricing).
## Overview
Use Klaviyo as a data source for Chartcastr. Connect your Klaviyo account and create charts for email performance and audience growth, then deliver them automatically to Slack or email.
Chartcastr connects with read-only OAuth access to Klaviyo data needed for chart generation.
## Setup
In Chartcastr, create a new source and choose **Klaviyo**. Complete the OAuth flow to grant read access.
Choose the email marketing metric you want to track. Each metric becomes its own source.
Pick a destination, set the schedule, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **8 pre-built Klaviyo metrics** across email performance and audience growth.
Performance overview, opens, clicks, delivered volume, and bounces.
List growth over time, total subscribers, and segment size comparisons.
## Authentication
Klaviyo uses OAuth 2.0 with PKCE for secure authentication. Chartcastr requests read-only access to:
* Account information
* Campaign and email event data
* Metrics and reporting
* Lists and segments
* Profile counts
Tokens are automatically refreshed in the background. If a token becomes invalid, you'll be prompted to reconnect.
## Next Steps
See every campaign, flow, and audience metric available for charting.
Set up automated chart delivery from Klaviyo to Slack or email.
Browse all available data source integrations.
# Klaviyo charts
Source: https://docs.chartcastr.com/integrations/sources/klaviyo/available-charts
Browse all Klaviyo email marketing charts in Chartcastr including campaign open rates, click-through rates, audience growth, and revenue attribution.
Chartcastr supports **8 pre-built Klaviyo metrics** across two categories.
## Email Performance
| Metric | Chart Type | Description |
| ------------------------------ | ---------- | ------------------------------------------------------------- |
| **Email Performance Overview** | Combo | Delivered volume with open, click, and bounce rates over time |
| **Email Opens** | Line | Daily email opens over time |
| **Email Clicks** | Line | Daily email clicks over time |
| **Emails Received** | Bar | Daily delivered email volume |
| **Email Bounces** | Bar | Daily bounced email count |
## Audience Growth
| Metric | Chart Type | Description |
| ------------------------- | ---------- | ---------------------------------------------------------------------------------------------- |
| **List Growth Over Time** | Line | New subscribers over time |
| **Total Subscribers** | Number | Total subscriber count across all lists |
| **Segment Sizes** | Table | Snapshot of audience segment counts, including overlapping engaged windows and new subscribers |
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Linear source
Source: https://docs.chartcastr.com/integrations/sources/linear
Connect Linear to Chartcastr for automated issue tracking and project health charts. Monitor cycle progress, team velocity, and backlog trends.
**Paid Feature** — Linear is available on all paid plans (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Use Linear as a data source for Chartcastr. Connect your Linear workspace and Chartcastr will pull project management metrics directly from your issues, cycles, and teams — issue velocity, cycle burndown, priority distribution, and more — and deliver them as automated charts to Slack or email.
Chartcastr connects via OAuth to your Linear workspace with read access to issues, cycles, and teams. Chart delivery and AI analysis appear as the **Chartcastr** app in your workspace.
## Setup
In Chartcastr, go to [Sources](https://chartcastr.com/admin/sources) and select **Linear**. Click **Connect** and complete the OAuth flow. You will be asked to authorise Chartcastr to access your workspace.
Choose which project management metric you want to track. Each metric becomes its own pulse source — you can add multiple to send different charts on different schedules.
Go to [Connections](https://chartcastr.com/admin/connections) → **New Connection**. Select your Linear source, pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries. Most teams send cycle burndowns weekly and velocity charts at sprint boundaries.
## Available Charts
Chartcastr supports **6 pre-built Linear metrics** across two categories.
Issues created vs completed over time, distribution by status, priority breakdown, and top assignees.
Current cycle burndown tracking scope vs completion, and velocity across recent cycles.
See the full list of Linear metrics with chart types and descriptions.
## Data & Permissions
Chartcastr requests the following Linear OAuth scopes:
| Scope | Purpose |
| ------- | ------------------------------------------------------------------ |
| `read` | Read access to issues, cycles, teams, and project data |
| `write` | Required for Chartcastr to post AI analysis as comments (optional) |
### What data does Chartcastr access?
* **Issues**: Title, status, priority, assignee, created date, completed date, and estimates.
* **Cycles**: Name, number, start/end dates, progress, and scope history.
* **Teams**: Team name and key for filtering.
Chartcastr does **not** access or store issue descriptions, comments, attachments, or any personal data beyond assignee names.
## Next Steps
Deliver Linear charts to your Slack channels with AI summaries in the thread.
Schedule Linear reports to any inbox or distribution list.
## FAQ
Linear OAuth grants access to a single workspace per connection. If you have multiple workspaces, connect each one separately.
By default, Chartcastr aggregates data across **all teams** in your workspace. When adding a source, you can optionally filter by one or more specific teams using the team picker. This filter is saved per source, so you can create separate sources for different teams.
Data is fetched fresh from Linear every time a pulse fires. Chartcastr does not cache or store your project data between runs.
Issue trend metrics use the last 12 weeks of data. Cycle velocity shows the last 6 completed cycles.
Chartcastr uses Linear's **actor=app** OAuth mode. Any AI analysis comments or updates posted by Chartcastr appear with the Chartcastr logo, not as an individual user.
# Linear charts
Source: https://docs.chartcastr.com/integrations/sources/linear/available-charts
Browse all Linear project management charts in Chartcastr including issue throughput, cycle burndowns, team velocity trends, and status breakdowns.
Chartcastr supports **6 pre-built Linear metrics** across two categories, designed for engineering leaders and project managers.
## Issues
| Metric | Chart Type | Description |
| --------------------------------- | ---------- | ------------------------------------------------------------------------ |
| **Issues Created vs Completed** ⭐ | Combo | Weekly comparison of issues created and completed over the last 12 weeks |
| **Issues by Status** | Bar | Current distribution of issues across workflow states |
| **Issues by Priority** | Bar | Current distribution of open issues by priority level |
| **Issues by Assignee** | Bar | Open issue count per team member (top 10) |
⭐ **Issues Created vs Completed** is the recommended starting metric — it shows whether the team is keeping pace with incoming work or accumulating a backlog.
## Cycles
| Metric | Chart Type | Description |
| -------------------------- | ---------- | ------------------------------------------------- |
| **Current Cycle Burndown** | Line | Scope vs completed issues for the active cycle |
| **Cycle Velocity** | Bar | Issues completed per cycle over the last 6 cycles |
If your Linear workspace does not use cycles, cycle metrics will appear disabled in the metric picker. You can enable cycles in Linear under Team Settings → Cycles.
## AI-Powered Summaries
Every Linear chart is delivered with an AI-generated summary specific to the project management metric:
* **Created vs Completed**: backlog growth signals, sprint capacity alignment
* **Issues by Status**: workflow bottleneck identification, blocked issue patterns
* **Issues by Priority**: priority inflation, critical issue accumulation
* **Issues by Assignee**: workload distribution, team capacity signals
* **Cycle Burndown**: on-track vs at-risk signals, scope creep detection
* **Cycle Velocity**: throughput trends, sprint-over-sprint consistency
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# LinkedIn Ads source
Source: https://docs.chartcastr.com/integrations/sources/linkedin-ads
Connect LinkedIn Ads to Chartcastr for automated B2B campaign charts. Track impressions, clicks, spend, and lead generation with scheduled reports.
**Early Access** — LinkedIn Ads integration is currently in early access. [Contact us](mailto:support@chartcastr.com) or [book a demo](https://chartcastr.com/book-a-demo) to request access.
**Paid Feature** — LinkedIn Ads is available on all paid plans (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Use LinkedIn Ads as a data source for Chartcastr. Connect your LinkedIn Campaign Manager and Chartcastr will pull B2B ad performance metrics to generate charts delivered automatically to your destinations.
## Planned Metrics
* Campaign spend and budget utilization
* Lead generation and conversion metrics
* Engagement analytics (clicks, impressions, CTR)
* B2B audience insights and demographic breakdowns
* Cost-per-lead tracking over time
## Next Steps
Deliver LinkedIn Ads charts to your Slack channels with AI summaries.
Schedule B2B campaign reports to any inbox.
# Luma source
Source: https://docs.chartcastr.com/integrations/sources/luma
Connect Luma to Chartcastr for automated event registration, attendance, and calendar subscriber charts delivered to Slack or email.
**Free + Paid** — Total Events is available on every Chartcastr plan. The other nine Luma metrics are gated to Pro+. [See pricing](https://chartcastr.com/pricing).
**Luma Plus required** — To use the Luma API, you'll need an active [Luma Plus](https://lu.ma/plus) subscription on the calendar you want to access. See Luma's [API overview](https://help.luma.com/p/luma-api) for details.
## Overview
Use Luma as a data source for Chartcastr. Connect your Luma calendar to turn your event programme into scheduled charts: event counts, registrations per event, average check-in rate, and calendar subscriber growth.
Chartcastr connects with read-only access to the Luma REST API using a per-calendar API key.
## Setup
The Luma API is only available on calendars with an active [Luma Plus](https://lu.ma/plus) subscription. Without it, the **Developer** tab will not expose an API key.
Sign in at [lu.ma](https://lu.ma), open **Calendars Home**, and select the calendar you want to chart. API keys are per-calendar, not per-account.
In the calendar, go to **Settings → Developer**, find the **API Keys** section, and copy your key. Chartcastr passes this via the `x-luma-api-key` header on every call. Keep the key secure — never share it publicly or commit it to version control.
In Chartcastr, create a new source and choose **Luma**. Paste the API key. Chartcastr validates the key against `GET /v1/calendar/list-events` before saving.
Choose the Luma metric you want to chart. Each metric becomes its own source you can route to Slack or email on any schedule.
## Available Metrics
Total events, upcoming pipeline, recent events, and a 12-month monthly trend.
Total registrations, top events by registration count, average check-in rate, and recent registrations.
Calendar subscriber count and 90-day subscriber growth trend.
See the full list of Luma metrics with chart types and tier requirements.
## How the connection works
* **Auth**: per-calendar API key sent via the `x-luma-api-key` header. Encrypted at rest using AES-256-GCM and never sent to the browser after setup.
* **Base URL**: `https://public-api.luma.com`
* **Endpoints used**: `/v1/calendar/list-events`, `/v1/calendar/list-people`, `/v1/event/get-guests`
* **Pagination**: cursor-based; Chartcastr walks pages with a safety cap of 2,000 entries per fetch.
* **Rate limit**: Luma allows 200 req/min per calendar key (500 req/min per organization key). Chartcastr's per-metric fetches stay well under this.
## Disconnecting
Open **Admin → Settings → Sources → Luma** and click **Disconnect**. This archives all Luma sources for the org and revokes Chartcastr's stored API key.
## References
* [Luma API overview](https://help.luma.com/p/luma-api) — official prerequisites, key location, and rate-limit policy
* [Luma developer docs](https://docs.luma.com) — endpoint reference
* [Luma Plus](https://lu.ma/plus) — subscription required to access the API
# Luma charts
Source: https://docs.chartcastr.com/integrations/sources/luma/available-charts
Browse all Luma event and community charts in Chartcastr including total events, upcoming pipeline, registrations per event, check-in rate, and calendar subscriber growth.
Chartcastr supports **10 pre-built Luma metrics** across three categories. One is available on every plan; nine are gated to Pro+.
## Events
| Metric | Chart Type | Description |
| -------------------- | ---------- | ------------------------------------------------------------------- |
| **Total Events** | Bar | Total number of events on your Luma calendar |
| **Upcoming Events** | Bar | Number of events scheduled in the future *(paid)* |
| **Recent Events** | Bar | Last 10 events by start date *(paid)* |
| **Events Per Month** | Line | Number of events hosted each month over the last 12 months *(paid)* |
## Guests
| Metric | Chart Type | Description |
| ------------------------------- | ---------- | ---------------------------------------------------------------------------------- |
| **Total Registrations (90d)** | Bar | Total number of registrations across all events in the last 90 days *(paid)* |
| **Top Events by Registrations** | Bar | Your 10 events with the most registrations *(paid)* |
| **Average Check-In Rate** | Bar | Checked-in guests as a percentage of approved guests across recent events *(paid)* |
| **Recent Registrations** | Bar | Last 10 guest registrations across all events *(paid)* |
## People
| Metric | Chart Type | Description |
| --------------------------- | ---------- | ---------------------------------------------------------------------- |
| **Calendar Subscribers** | Bar | Total number of people subscribed to your Luma calendar *(paid)* |
| **Subscriber Growth (90d)** | Line | Daily count of new calendar subscribers over the last 90 days *(paid)* |
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Meta Ads source
Source: https://docs.chartcastr.com/integrations/sources/meta-ads
Connect Facebook and Instagram Ads to Chartcastr for automated performance charts. Track spend, reach, engagement, and conversions over time.
**Private Beta** — Meta Ads integration is currently in private beta due to platform approval delays. [Contact us](mailto:support@chartcastr.com) or [book a demo](https://chartcastr.com/book-a-demo) to request access.
**Paid Feature** — Meta Ads is available on all paid plans (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Use Meta Ads as a data source for Chartcastr. Connect your Meta Business account via OAuth and Chartcastr will pull ad performance metrics from Facebook and Instagram to generate charts delivered automatically to your destinations.
## Setup
In Chartcastr, go to **Settings → Sources** and click **Connect** next to Meta Ads. You'll be redirected to Meta to authorize access.
After connecting, choose which ad account to pull data from.
Choose which performance metric to track. Each metric becomes its own source.
Pick a destination and delivery schedule, then optionally enable AI summaries.
## Available Metrics
Chartcastr supports **42 pre-built Meta Ads metrics** across six categories.
Daily spend, CPC, CPM, ROAS, CPA, cost per lead/purchase, and spend by campaign.
Impressions, reach, frequency, clicks, link clicks, and unique clicks.
CTR, engagement rate, reactions, comments, shares, saves, thumbstop rate, and video watch milestones.
Conversions, purchases, leads, add to cart, checkout, view content, purchase revenue, and cost per result.
Spend by ad set, age group, gender, platform, placement, and device.
Spend vs conversions combo chart and full conversion funnel.
See the full list of Meta Ads metrics with chart types and descriptions.
## Next Steps
Deliver Meta Ads charts to your Slack channels with AI summaries.
Schedule ad performance reports to any inbox.
# Meta Ads charts
Source: https://docs.chartcastr.com/integrations/sources/meta-ads/available-charts
Browse all Meta Ads charts in Chartcastr including daily spend, impressions, reach, click-through rates, cost per result, and campaign breakdowns.
Chartcastr supports **42 pre-built Meta Ads metrics** across six categories. Each metric is delivered with an AI-generated summary tailored to Facebook and Instagram ad performance.
## Spend & Efficiency
| Metric | Chart Type | Description |
| ------------------------------------ | ---------- | ------------------------------------------- |
| **Daily Ad Spend** ⭐ | Line | Total ad spend across all campaigns per day |
| **Cost per Click** | Line | Average cost per click per day |
| **CPM (Cost per 1,000 Impressions)** | Line | Cost per thousand impressions per day |
| **Return on Ad Spend** | Line | Purchase ROAS across all campaigns per day |
| **Cost per Acquisition** | Line | Average cost per conversion per day |
| **Cost per Lead** | Line | Average cost per lead action per day |
| **Cost per Purchase** | Line | Average cost per purchase action per day |
| **Spend by Campaign** | Bar | Ad spend broken down by campaign |
⭐ **Daily Ad Spend** is the recommended starting metric for budget tracking. For e-commerce, pair it with **ROAS** for a complete efficiency picture.
## Delivery
| Metric | Chart Type | Description |
| --------------------- | ---------- | ------------------------------------------------------------ |
| **Daily Impressions** | Line | Total ad impressions per day |
| **Daily Reach** | Line | Unique people who saw your ads per day |
| **Average Frequency** | Line | Average number of times each person saw your ads per day |
| **Daily Clicks** | Line | Total ad clicks per day |
| **Link Clicks** | Line | Clicks on links within your ads (excludes engagement clicks) |
| **Unique Clicks** | Line | Deduplicated click count (one per person per day) |
## Engagement & Video
| Metric | Chart Type | Description |
| ---------------------- | ---------- | ------------------------------------------------------------------- |
| **Click-Through Rate** | Line | Percentage of impressions that resulted in a click |
| **Engagement Rate** | Line | Post engagements as a percentage of impressions per day |
| **Post Reactions** | Line | Total reactions (likes, loves, etc.) on your ads per day |
| **Post Comments** | Line | Comments on your ads per day |
| **Post Shares** | Line | Shares of your ads per day |
| **Post Saves** | Line | Saves of your ads per day |
| **Thumbstop Rate** | Line | Percentage of impressions where users stopped to watch 3s+ of video |
| **Video Views (3s+)** | Line | Number of times your video was viewed for at least 3 seconds |
| **Video 25% Watched** | Line | Times your video was watched to 25% of its length |
| **Video 50% Watched** | Line | Times your video was watched to 50% of its length |
| **Video 75% Watched** | Line | Times your video was watched to 75% of its length |
| **Video 100% Watched** | Line | Times your video was watched to completion |
## Conversions & Revenue
| Metric | Chart Type | Description |
| --------------------- | ---------- | ----------------------------------------------------------------------------- |
| **Daily Conversions** | Line | Purchase and lead actions per day |
| **Daily Purchases** | Line | Purchase events per day (requires Meta Pixel or Conversions API) |
| **Daily Leads** | Line | Lead generation events per day |
| **Add to Cart** | Line | Add-to-cart events per day (requires Meta Pixel or Conversions API) |
| **Initiate Checkout** | Line | Checkout initiation events per day (requires Meta Pixel or Conversions API) |
| **View Content** | Line | Content view events per day (requires Meta Pixel or Conversions API) |
| **Purchase Revenue** | Line | Total revenue from purchases per day (requires Meta Pixel or Conversions API) |
| **Cost per Result** | Line | Average cost per primary conversion action per day |
## Breakdowns
| Metric | Chart Type | Description |
| ---------------------- | ---------- | ----------------------------------------------------------------------- |
| **Spend by Ad Set** | Bar | Ad spend broken down by ad set |
| **Spend by Age Group** | Bar | Ad spend broken down by audience age group |
| **Spend by Gender** | Bar | Ad spend broken down by audience gender |
| **Spend by Platform** | Bar | Ad spend by platform (Facebook, Instagram, Messenger, Audience Network) |
| **Spend by Placement** | Bar | Ad spend by placement (Feed, Stories, Reels, Right Column, etc.) |
| **Spend by Device** | Bar | Ad spend by device type (mobile, desktop, tablet) |
## Overview
| Metric | Chart Type | Description |
| ------------------------ | ---------- | --------------------------------------------------------- |
| **Spend vs Conversions** | Combo | Daily spend with conversion overlay |
| **Conversion Funnel** | Funnel | View content → add to cart → initiate checkout → purchase |
## AI-Powered Summaries
Every Meta Ads chart is delivered with an AI-generated summary specific to the ad metric:
* **Spend/ROAS**: budget pacing, efficiency trends, campaign-level outliers
* **Delivery**: reach saturation, frequency fatigue signals, audience exhaustion
* **Engagement**: creative fatigue detection, thumbstop trends, video completion dropoff
* **Conversions**: funnel bottlenecks, pixel attribution signals, cost-per-result trends
* **Breakdowns**: demographic shifts, platform mix changes, placement efficiency
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Mixpanel source
Source: https://docs.chartcastr.com/integrations/sources/mixpanel
Connect Mixpanel to Chartcastr for automated DAU/WAU/MAU, top events, funnels, retention, and custom event overlays delivered to Slack or email.
## Overview
Use Mixpanel as a data source for Chartcastr. Connect your project with a **Service Account** and Chartcastr will pull active user metrics, top events, saved funnels, cohort retention, and a custom multi-event overlay to generate charts delivered automatically to Slack or email.
Chartcastr connects with read-only access to your Mixpanel project — the Service Account only needs the **Analyst** role.
**Mixpanel Query API requires a paid Mixpanel plan.** Free / Starter projects can't make API calls and will fail at connect time with `402: Your plan does not allow API calls`. You need at least a paid Mixpanel tier (Growth or Enterprise) to use Mixpanel as a Chartcastr source. See [Mixpanel pricing](https://mixpanel.com/pricing).
## Setup
In Mixpanel, go to **Project Settings → Service Accounts** and create a new account. Grant it the **Analyst** role on the project. Copy the **username** and **secret** — you'll need both.
Service Account creation requires Owner or Admin permission on the Mixpanel project. The legacy "API Secret" still works but is being phased out — prefer Service Accounts.
Your numeric Project ID is in your Mixpanel URL: `https://mixpanel.com/project//...` (or `eu.mixpanel.com` for EU residency).
In Chartcastr, go to **New Connection** and select **Mixpanel** as a source. Pick **US** or **EU** region, paste the Service Account username + secret + Project ID, and click **Test & Connect**.
**Region**: Use **US** for `mixpanel.com` or **EU** for `eu.mixpanel.com`. The region drives which Query API host we hit and is locked once connected — disconnect and reconnect to switch regions.
After connecting, Chartcastr auto-detects your pageview event by looking for common names (`Page Viewed`, `$mp_web_page_view`, `Page View`, etc.) in your top events. You can override it with any event from your project — pick **Pick a different event** in the connect modal.
Choose a chart type. Funnel metrics ask you to pick a saved funnel; the Custom Events Overlay asks you to pick up to 5 events.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **12 pre-built Mixpanel metrics** across six categories.
DAU, WAU, MAU, and a combined DAU/WAU/MAU chart for engagement tracking.
Total events, unique event users, and a stacked Top Events chart.
Total pageviews and unique pageview users using your auto-detected pageview event.
Saved-funnel conversion rate over time and per-step user counts.
Average weekly cohort retention curve.
Pick up to 5 events and overlay them as lines on a single chart.
See the full list of Mixpanel metrics with chart types and descriptions.
## Authentication
Chartcastr uses HTTP Basic auth with your Service Account username and secret. The secret is encrypted at rest with AES-256-GCM. We never store the project token — only the SA credentials, which are read-only.
## Rate Limits
Mixpanel's Query API is capped at **60 queries/hour** per project with a maximum of **5 concurrent queries**. Chartcastr's pulse cadence (daily/weekly) keeps you well below the cap. If you hit the limit you'll see a clear "rate limit hit" error in the chart preview — wait an hour and try again.
## Custom Events Overlay
The **Custom Events Overlay** chart lets you pick up to 5 event names from your project and renders them as a multi-line chart on a single shared Y axis with a fixed color palette.
v1 ships with a single shared Y axis. Per-event left/right axis selection is on the v2 roadmap so high-volume and low-volume events can share a chart without one squashing the other.
## Next Steps
Deliver Mixpanel charts to your Slack channels with AI summaries in the thread.
Schedule Mixpanel reports to any inbox or distribution list.
# Mixpanel charts
Source: https://docs.chartcastr.com/integrations/sources/mixpanel/available-charts
Browse all Mixpanel product analytics charts in Chartcastr including DAU/WAU/MAU, top events, pageviews, saved funnels, cohort retention, and custom event overlays.
Chartcastr supports **12 pre-built Mixpanel metrics** across six categories. Each metric is delivered with an AI-generated summary tailored to product analytics.
## Active Users
| Metric | Chart Type | Description |
| ------------------------------ | ---------- | -------------------------------------------------------------- |
| **Daily Active Users (DAU)** | Bar | Unique users per day based on the auto-detected pageview event |
| **Weekly Active Users (WAU)** | Line | Rolling 7-day unique users (approximated from daily uniques) |
| **Monthly Active Users (MAU)** | Line | Rolling 30-day unique users (approximated from daily uniques) |
| **DAU / WAU / MAU** | Combo | Combined chart showing all three active user metrics together |
**DAU / WAU / MAU** is the recommended starting metric — it gives a complete engagement picture in a single chart and pairs well with a daily or weekly Slack delivery.
## Events
| Metric | Chart Type | Description |
| ------------------------- | ----------- | -------------------------------------------------------- |
| **Total Events** | Bar | Total event count per day across your top events |
| **Unique Users (Events)** | Line | Unique users across your top events per day |
| **Top Events** | Stacked Bar | Your top 5 events stacked together over the last 30 days |
## Pageviews
| Metric | Chart Type | Description |
| ------------------------- | ---------- | --------------------------------------------------------------- |
| **Total Pageviews** | Bar | Total pageview count per day using your detected pageview event |
| **Unique Pageview Users** | Line | Unique users with pageviews per day |
We auto-detect a pageview event from common names (`Page Viewed`, `$mp_web_page_view`, `Page View`, etc.). Override it any time from the Mixpanel section of the New Connection modal.
## Funnels
| Metric | Chart Type | Description |
| -------------------------- | ---------- | -------------------------------------------------------------------- |
| **Funnel Conversion Rate** | Line | Overall conversion rate of a saved funnel over time (weekly buckets) |
| **Funnel Step Breakdown** | Bar | Per-step user counts for a saved funnel for the latest period |
Funnel charts require an existing saved funnel in your Mixpanel project. Pick the funnel ID in the New Connection modal.
## Retention
| Metric | Chart Type | Description |
| -------------------- | ---------- | ------------------------------------------------------------------------------------- |
| **Cohort Retention** | Area | Average weekly cohort retention curve (% retained per week-offset since cohort start) |
## Custom
| Metric | Chart Type | Description |
| ------------------------- | ---------- | ----------------------------------------------------------------------- |
| **Custom Events Overlay** | Line | Pick up to 5 events and overlay them as lines on a single shared Y axis |
v1 of the Custom Events Overlay uses a **single shared Y axis**. v2 will let you assign each event to a left or right axis so high-volume and low-volume events can share a chart cleanly.
## AI-Powered Summaries
Every Mixpanel chart is delivered with an AI-generated summary specific to the product metric:
* **Active Users**: engagement trends, DAU/MAU ratio (stickiness), weekly patterns
* **Events / Top Events**: usage volume trends, anomaly detection, top-event mix shifts
* **Pageviews**: traffic patterns, bot detection signals, feature adoption proxy
* **Funnels**: conversion-rate movement, step drop-off changes
* **Retention**: cohort decay shape, sticky-week signals
* **Custom Events Overlay**: cross-event correlations, divergent trends
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Notion Database source
Source: https://docs.chartcastr.com/integrations/sources/notion
Turn any Notion database into automated charts. AI suggests label, value, and group-by columns so non-analytical data becomes shippable analytics.
## Overview
Use a Notion database as a Chartcastr data source. After you connect your Notion workspace, pick any database that's shared with Chartcastr and we'll suggest 2–4 meaningful charts based on its columns and sample values — no formulas, no copy-paste, no spreadsheet wrangling.
Notion databases are flexible but **not analytical** — they don't have a built-in chart layer. Chartcastr fills that gap: it reads your rows, maps your columns to chart axes, aggregates, and delivers the result to Slack or email on whatever schedule you pick.
## Setup
In Chartcastr, go to **New Source → Notion Database**. If Notion isn't connected yet, click **Connect Notion** and complete the OAuth flow. Pick the databases you want Chartcastr to read in Notion's permission screen.
The same Notion connection is used for both database charts and page-content context. Connecting once enables both.
Search or browse for the database you want to chart. Click any database to load its schema and sample rows.
Chartcastr's AI analyzes your columns and sample rows and proposes 2–4 meaningful charts (e.g. "Revenue by Month", "Tasks by Status"). Pick the one you want — or click **Configure manually instead** to start from scratch.
Adjust the column mapping if you want:
* **Label** — the X-axis column. Auto-suggests date, title, or select columns.
* **Values** — Y-axis numeric columns. Auto-suggests number, formula, rollup, and checkbox columns.
* **Break down by** — optional pivot. Each unique value in the column becomes its own series. Capped at the top 5 values by total; remaining values collapse into an **Other** bucket.
* **Chart type** — line, bar, area, or pie.
* **Aggregation** — sum, average, count, min, or max.
The live preview refreshes as you tweak.
Save the chart, then route it to a Slack channel or email on a schedule.
## Supported column types
| Notion type | Used as | Notes |
| ------------------------------------------ | -------------- | ------------------------------------------------------ |
| Title, Rich text | Label | Concatenated plain text |
| Number | Value | Direct |
| Date, Created time, Last edited time | Label | ISO date is trimmed to `YYYY-MM-DD` for clean grouping |
| Select, Status, Multi-select | Group by | Multi-select joined with commas when used as a label |
| Formula | Value or label | Detected from result sub-type (number / string / date) |
| Rollup | Value | Numeric rollups summed; string rollups joined |
| Checkbox | Value | True → 1, False → 0 |
| Unique ID | Value | Numeric part |
| Relation, People, Files, URL, Email, Phone | Not chartable | Skipped |
## Group-by behavior
When you pick a **Break down by** column, Chartcastr pivots the data: each unique value in the column becomes its own series. To keep charts readable, only the **top 5 values by total are shown** — the remaining values are aggregated into a single **Other** bucket. This prevents a column with hundreds of unique values from producing an unreadable chart.
## How often does it sync?
The database is queried fresh at every pulse delivery. If your database has up to 1000 rows, every row is included. Above 1000 rows, only the first 1000 are charted — let us know if you need a higher cap or filters.
## Limits & gotchas
* **Schema drift**: If you rename or delete a column referenced by a saved chart, the source is marked **degraded** at the next delivery with a clear error message. Re-open the source in settings to remap.
* **Notion permissions**: Chartcastr can only see databases that are **shared with the Chartcastr integration** in Notion. New databases need to be shared explicitly. See [Notion's docs on managing connections](https://www.notion.so/help/add-and-manage-connections-with-the-api).
* **Rate limits**: Notion's API is limited to \~3 requests per second; Chartcastr retries with backoff if it hits the limit.
## Next Steps
Deliver Notion charts to your Slack channels with AI summaries in the thread.
Schedule Notion-derived reports to any inbox or distribution list.
# OpenPageRank source
Source: https://docs.chartcastr.com/integrations/sources/openpagerank
Pulse-track your domain authority with a fully managed source — no API key, no SEO subscription. Slack/email alerts when your OpenPageRank score changes.
**Free tier included.** Track 1 domain on a daily or weekly cadence with no API key. Paid plans add multiple domains, hourly cadence, and backlinks / referring-domains via DataForSEO.
**Auto-configured source.** OpenPageRank is one of Chartcastr's zero-setup sources — there's no OAuth flow, API key, or upstream account to create. Enable it with one click, type in the domain you want to track, and Chartcastr handles fetching, scoring, charting, and alerting on every run. The upstream API key and quota are managed by us.
## Overview
OpenPageRank is the simplest way to monitor your site's authority. You enter a domain — Chartcastr handles the rest. We pulse Slack or email the moment the score moves, with the trend chart already drawn and an AI summary attached.
This source is powered by [OpenPageRank](https://www.domcop.com/openpagerank/), an open metric built on Common Crawl that brings back a PageRank-style 0–10 score. Chartcastr normalizes it to a 0–100 score so it reads like the Domain Rating / Domain Authority numbers you're used to, and fronts the upstream API cost — there is no key for you to manage.
## Prerequisites
* A Chartcastr account (free is fine for 1 domain on daily/weekly cadence)
That's it. No OAuth, no SEO tool subscription, no DNS verification.
## Setup
Go to [Settings → Source Integrations](https://chartcastr.com/admin/settings/source/integrations) and click **Connect** on the OpenPageRank row. This is a one-click action — there's no form to fill in.
From [Add Source](https://chartcastr.com/admin/integrations?addSource=openpagerank), enter your domain (bare hostname like `example.com`). Chartcastr will fetch the current score so you can preview the chart.
Pick a destination (Slack channel or email), set the schedule, and you're done. Pulses fire only when the score changes between runs — unchanged values become silent `UNCHANGED` job runs and don't ping you.
## Plan limits
| Limit | Free | Paid |
| -------------------------------------------------- | ---------------------- | --------------------------- |
| Domains tracked | 1 | Unlimited |
| Schedule cadence | Daily or weekly (≥24h) | Any (hourly, custom) |
| OpenPageRank metric | ✓ | ✓ |
| Ahrefs DR backfill (90d, when Ahrefs is connected) | — | ✓ |
| Backlinks metric | — | Coming on paid (DataForSEO) |
| Referring Domains metric | — | Coming on paid (DataForSEO) |
## Available metrics
| Metric | Chart Type | Plan | Description |
| --------------------- | ---------- | ------------------ | ---------------------------------------------------------------------------------------------------------- |
| **OpenPageRank** | Line | Free | 0–100 authority score over time. Built from past job runs — history grows after the first scheduled pulse. |
| **Backlinks** | Line | Paid (coming soon) | Total inbound link count, charted over time. |
| **Referring Domains** | Line | Paid (coming soon) | Number of unique domains linking to your domain. |
## Historical backfill via Ahrefs
OpenPageRank only returns the *current* score on each call (the upstream index refreshes roughly quarterly), so brand-new connections start with a single chart point and accumulate history over time.
If your org also has the Ahrefs source connected, you can opt in to backfill **90 days of historical Ahrefs Domain Rating** when you add a domain. The backfilled points render as a separate dashed series on the same chart so you can see prior trend without conflating scales — Ahrefs DR and OpenPageRank are similar in concept (both 0–100) but use different methodologies, so we don't merge them into one line.
## How pulses work
Chartcastr computes a deterministic hash of the score on every run. If the value matches the previous run, the job is marked `UNCHANGED` and no Slack / email is sent — even though we still pulled the latest data. If the score moves, you get a notification with the chart and an AI-generated summary of the delta.
## Cross-source analysis
Add OpenPageRank to a [Source Group](/admin/sources/source-groups) alongside Plausible, Google Search Console, or Shopify, and Chartcastr's AI correlates the metrics across them in a single pulse:
* *"OpenPageRank held steady but organic clicks dropped 18%"* — likely a SERP or algorithm shift, not authority loss
* *"OpenPageRank up 3 points, revenue flat"* — SEO uplift hasn't converted yet
* *"OpenPageRank slipped, referring domains down too"* — coordinated link-profile change worth investigating
## Notes
* **Rate limits:** The OpenPageRank API allows 10,000 requests per hour. Chartcastr's usage is well within this limit, but if you experience throttling, check our status page.
* The free OpenPageRank API key has a generous daily request cap shared across all Chartcastr customers. We monitor usage; if you ever see `service unavailable`, check our status page.
* The first scheduled run will draw a single-point chart unless you opted into the Ahrefs backfill. Each subsequent run adds a point. Daily cadence reaches a useful 30-day chart in a month.
* When the paid DataForSEO upstream lands, you'll be able to add backlinks and referring-domains metrics to the same source.
# Plausible Analytics source
Source: https://docs.chartcastr.com/integrations/sources/plausible
Connect Plausible Analytics to Chartcastr for automated privacy-friendly web analytics charts. Track visitors, pageviews, and traffic sources.
## Overview
Use Plausible Analytics as a data source for Chartcastr. Connect your Plausible account with an API key and Chartcastr will pull visitor metrics, pageviews, bounce rates, and traffic breakdowns to generate charts delivered automatically to Slack or email.
Plausible is a privacy-friendly alternative to Google Analytics. Chartcastr connects with read-only access to your site's analytics data.
## Setup
In Plausible, go to **Account Settings → API Keys** ([direct link](https://plausible.io/settings#api-keys)) and create a new key. Copy the key — you'll need it in the next step.
Your Site ID is the domain you registered in Plausible (e.g. `example.com`). You can find it on your Plausible dashboard or in **Site Settings**.
In Chartcastr, go to **New Source** and select **Plausible Analytics**. Enter your API key and Site ID. Click **Test & Connect** to validate the connection.
**Self-hosted Plausible**: If you run your own Plausible instance, enter your custom host URL (e.g. `https://plausible.yourdomain.com`). Leave blank for Plausible Cloud.
Choose which analytics metric to track. Each metric becomes its own source. You can add multiple sources to send different charts on different schedules.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **10 pre-built Plausible metrics** across two categories.
Visitors, pageviews, sessions, bounce rate, and average visit duration per day.
Top pages, traffic sources, countries, UTM sources, and entry pages.
See the full list of Plausible metrics with chart types and descriptions.
## Next Steps
Deliver Plausible charts to your Slack channels with AI summaries in the thread.
Schedule Plausible analytics reports to any inbox or distribution list.
# Plausible Analytics charts
Source: https://docs.chartcastr.com/integrations/sources/plausible/available-charts
Browse all Plausible Analytics charts in Chartcastr including unique visitors, pageview trends, bounce rate, visit duration, and source breakdowns.
Chartcastr supports **10 pre-built Plausible metrics** across two categories. Each metric is delivered with an AI-generated summary tailored to web analytics.
## Traffic
| Metric | Chart Type | Description |
| ---------------------- | ---------- | -------------------------------------------------------- |
| **Visitors Per Day** | Line | Unique visitors each day over the last 30 days |
| **Pageviews Per Day** | Line | Total pageviews each day over the last 30 days |
| **Sessions Per Day** | Line | Total sessions (visits) each day over the last 30 days |
| **Bounce Rate** | Line | Bounce rate trend over the last 30 days |
| **Avg Visit Duration** | Line | Average visit duration in seconds per day (last 30 days) |
**Visitors Per Day** is the recommended starting metric for most sites. It pairs well with a daily or weekly Slack delivery to your marketing channel.
## Breakdowns
| Metric | Chart Type | Description |
| ----------------------- | ---------- | ------------------------------------------------------ |
| **Top Pages** | Bar | Top 10 pages by visitor count (last 30 days) |
| **Top Traffic Sources** | Bar | Top 10 traffic sources by visitor count (last 30 days) |
| **Top Countries** | Bar | Top 10 countries by visitor count (last 30 days) |
| **Top UTM Sources** | Bar | Top 10 UTM sources by visitor count (last 30 days) |
| **Top Entry Pages** | Bar | Top 10 landing pages by visitor count (last 30 days) |
## AI-Powered Summaries
Every Plausible chart is delivered with an AI-generated summary specific to the web analytics metric:
* **Visitors/Pageviews**: traffic trends, weekend vs weekday patterns, growth signals
* **Bounce Rate**: pages driving high bounce, correlation with traffic sources
* **Top Pages**: content performance shifts, emerging vs declining pages
* **Traffic Sources**: channel mix changes, referral anomalies, campaign impact
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# PostHog source
Source: https://docs.chartcastr.com/integrations/sources/posthog
Connect PostHog to Chartcastr for automated product analytics charts. Track active users, growth accounting, events, and pageview trends over time.
## Overview
Use PostHog as a data source for Chartcastr. Connect your PostHog project with a Personal API Key and Chartcastr will pull active user metrics, growth accounting data, and event analytics to generate charts delivered automatically to Slack or email.
Chartcastr connects with read-only access to your PostHog project — it needs the `query:read` and `project:read` API key scopes.
## Setup
In PostHog, go to **Settings → Personal API Keys** ([direct link](https://us.posthog.com/settings/user-api-keys)) and create a new key. Grant it the **`query:read`** and **`project:read`** scopes. Copy the key — you'll need it in the next step.
Use a **Personal API Key** (starts with `phx_`), not the Project API Key. The Project API Key only works for event capture, not for reading analytics data.
In PostHog, go to **Settings → Project** ([direct link](https://us.posthog.com/settings/project-details)) and copy your **Project ID** (a numeric value). You can also find it in the URL: `https://us.posthog.com/project//`.
In Chartcastr, go to **New Connection** and select **PostHog** as a source. Enter your Personal API Key, Project ID, and host URL. Click **Validate** to test the connection.
**Host URL**: Use `https://us.posthog.com` for US Cloud or `https://eu.posthog.com` for EU Cloud. Self-hosted users should enter their own PostHog instance URL.
Choose which metric type you want to track. Each metric becomes its own source. You can add multiple sources to send different charts on different schedules.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **13 pre-built PostHog metrics** across four categories.
DAU, WAU, MAU, and combined DAU/WAU/MAU charts for engagement tracking.
New, retained, resurrected, and dormant user lifecycle stages.
Total event count and unique event users per day.
Total pageviews and unique pageview users per day.
See the full list of PostHog metrics with chart types and descriptions.
## API Key Scopes
Chartcastr requires the **`query:read`** and **`project:read`** scopes:
* **`query:read`** — Read-only access to PostHog's Query API for fetching analytics data
* **`project:read`** — Read-only access to project info (needed to validate the connection)
No write access is needed.
You can optionally restrict the API key to a specific project for additional security.
## Rate Limits
PostHog's Query API has rate limits of **120–2,400 requests/hour** depending on your PostHog plan, with a maximum of **3 concurrent queries** per project. Chartcastr respects these limits and batches queries efficiently.
## Next Steps
Deliver PostHog charts to your Slack channels with AI summaries in the thread.
Schedule PostHog reports to any inbox or distribution list.
# PostHog charts
Source: https://docs.chartcastr.com/integrations/sources/posthog/available-charts
Browse all PostHog product analytics charts in Chartcastr including DAU/WAU/MAU trends, growth accounting, event volumes, and pageview breakdowns.
Chartcastr supports **13 pre-built PostHog metrics** across four categories. Each metric is delivered with an AI-generated summary tailored to product analytics.
## Active Users
| Metric | Chart Type | Description |
| ------------------------------ | ---------- | ------------------------------------------------------------- |
| **Daily Active Users (DAU)** | Line | Unique users per day based on pageview events |
| **Weekly Active Users (WAU)** | Line | Rolling 7-day unique users |
| **Monthly Active Users (MAU)** | Line | Rolling 30-day unique users |
| **DAU / WAU / MAU** | Combo | Combined chart showing all three active user metrics together |
**DAU / WAU / MAU** is the recommended starting metric — it gives a complete engagement picture in a single chart and pairs well with a daily or weekly Slack delivery.
## Growth Accounting
| Metric | Chart Type | Description |
| --------------------- | ----------- | --------------------------------------------------------------------- |
| **New Users** | Bar | Users who performed the event and were created during the interval |
| **Retained Users** | Bar | Users active in both the previous and current interval |
| **Resurrected Users** | Bar | Users inactive in the previous interval but active again |
| **Dormant Users** | Bar | Users active in the previous interval but inactive in the current one |
| **Growth Accounting** | Stacked Bar | Combined chart showing all four lifecycle stages |
The Growth Accounting chart is especially useful for product teams to understand whether growth is driven by acquisition (new), retention, or reactivation (resurrected) — and how much is lost to churn (dormant).
## Events
| Metric | Chart Type | Description |
| ------------------------- | ---------- | -------------------------------------- |
| **Total Events** | Line | Total count of all events per day |
| **Unique Users (Events)** | Line | Unique users across all events per day |
## Pageviews
| Metric | Chart Type | Description |
| ------------------------- | ---------- | ----------------------------------- |
| **Total Pageviews** | Line | Total pageview count per day |
| **Unique Pageview Users** | Line | Unique users with pageviews per day |
## Custom
| Metric | Chart Type | Description |
| ------------------------- | ---------- | ----------------------------------------------------------------------- |
| **Custom Events Overlay** | Line | Pick up to 5 events and overlay them as lines on a single shared Y axis |
v1 of the Custom Events Overlay uses a **single shared Y axis**. v2 will let you assign each event to a left or right axis so high-volume and low-volume events can share a chart cleanly.
## AI-Powered Summaries
Every PostHog chart is delivered with an AI-generated summary specific to the product metric:
* **Active Users**: engagement trends, DAU/MAU ratio (stickiness), weekly patterns
* **Growth Accounting**: net growth signals, retention health, churn acceleration
* **Events**: usage volume trends, anomaly detection, correlation with releases
* **Pageviews**: traffic patterns, bot detection signals, feature adoption proxy
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Resend source
Source: https://docs.chartcastr.com/integrations/sources/resend
Connect Resend to Chartcastr for automated transactional email charts. Monitor delivery volume, bounce rates, and email status trends over time.
## Overview
Use Resend as a data source for Chartcastr. Connect your Resend account with an API key and Chartcastr will pull email delivery metrics to generate charts delivered automatically to Slack or email.
Chartcastr connects with read-only access to your Resend account — it only needs permission to read email analytics data.
## Setup
In Resend, go to **API Keys** ([direct link](https://resend.com/api-keys)) and create a new key. Copy the key — you'll need it in the next step.
The API key starts with `re_`. You only need read-level access for Chartcastr to pull email metrics.
In Chartcastr, go to **New Source** and select **Resend**. Enter your API key and click **Test & Connect Resend** to validate the connection.
Choose which email metric to track. Each metric becomes its own source. You can add multiple sources to track different aspects of your email delivery.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Track emails sent per day over the last 30 days.
Stacked breakdown of delivered, bounced, and complained emails per day.
See the full list of Resend metrics with chart types and descriptions.
## Next Steps
Deliver Resend charts to your Slack channels with AI summaries in the thread.
Schedule Resend delivery reports to any inbox or distribution list.
# Resend charts
Source: https://docs.chartcastr.com/integrations/sources/resend/available-charts
Browse all Resend transactional email charts in Chartcastr including daily send volume, delivery success rates, and bounce or complaint tracking.
Chartcastr supports **2 pre-built Resend metrics** for tracking email delivery health.
## Email Delivery
| Metric | Chart Type | Description |
| ------------------------- | ----------- | -------------------------------------------------------------- |
| **Emails Sent Per Day** | Bar | Total emails sent each day over the last 30 days |
| **Email Delivery Status** | Stacked Bar | Breakdown of delivered, bounced, and complained emails per day |
**Email Delivery Status** is the recommended starting metric — it shows volume alongside delivery health in a single chart. A growing bounce or complaint rate is flagged automatically by the AI summary.
## AI-Powered Summaries
Every Resend chart is delivered with an AI-generated summary specific to email delivery:
* **Emails Sent**: volume trends, day-of-week patterns, spike/drop detection
* **Delivery Status**: bounce rate trends, complaint rate changes, deliverability health signals
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# RevenueCat source
Source: https://docs.chartcastr.com/integrations/sources/revenuecat
Connect RevenueCat to Chartcastr for automated subscription metrics charts. Track MRR, subscriber counts, churn rate, and trials delivered to Slack or email.
## Overview
Use RevenueCat as a data source for Chartcastr. Connect your project with a **V2 Secret API Key** and Chartcastr will pull subscription metrics like MRR, active subscribers, new subscribers, churn rate, and trial counts to generate charts delivered automatically to Slack or email.
RevenueCat is the leading subscription management platform for mobile and web apps. Chartcastr connects with read-only access via RevenueCat's V2 REST API — no SDK changes required.
## Setup
In the RevenueCat dashboard, open **Project Settings → API Keys** and create a new key (or edit an existing one). Set **API version** to **V2** and grant the read-only permissions listed below — Chartcastr never writes to your RevenueCat project.
| Section | Permission | Access Level |
| --------------------------------- | --------------------------------- | ------------- |
| Charts metrics permissions | Overview Configuration | **Read only** |
| Charts metrics permissions | Charts Configuration | **Read only** |
| Charts metrics permissions | Benchmarks Configuration | **Read only** |
| Charts metrics permissions | Experiment results Configuration | **Read only** |
| Project configuration permissions | Projects Configuration | **Read only** |
| Customer information permissions | *(all)* | No access |
| Project configuration permissions | Collaborators / Apps / Audit logs | No access |
The fastest setup is to set the **Charts metrics permissions** section header to **Read only** (which applies it to all four rows at once), then expand **Project configuration permissions** and switch **Projects Configuration** to **Read only**. Leave every other section on **No access**.
**Projects Configuration → Read only** is required so Chartcastr can list the project the key belongs to and bind the integration automatically. Without it the connect step fails with `The API key needs at least the project_configuration:projects:read permission defined`.
Anyone with the Secret API Key can query your project's chart data. Chartcastr stores it encrypted at rest with AES-256-GCM, but treat the key as a credential and rotate it through RevenueCat if it ever leaks.
In Chartcastr, go to **Admin → Settings → Source Integrations**, find **RevenueCat**, click **Connect**, and paste your V2 Secret API Key. Chartcastr will detect the project the key is scoped to and confirm the connection — you do not need to paste a Project ID.
Choose which subscription metric to track. Each metric becomes its own source. You can add multiple sources to send different charts on different schedules.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Troubleshooting
The API key is valid but does not have permission to list projects, so Chartcastr cannot bind it to a project. In RevenueCat, edit the key and set **Project configuration permissions → Projects Configuration** to **Read only**, then retry the connect.
Confirm the key starts with `sk_` (a V2 **Secret** key, not a publishable or v1 key), that **API version** is set to **V2**, and that the key has not been revoked in **Project Settings → API Keys**.
Chartcastr reads from the **Overview** and **Charts** endpoints. If those rows are set to **No access**, the connect succeeds but every metric returns no data. Grant **Read only** on **Overview Configuration** and **Charts Configuration** under **Charts metrics permissions**.
## Available Metrics
Chartcastr supports **6 pre-built RevenueCat metrics** across three categories.
Monthly Recurring Revenue (MRR) and Revenue Per Day.
Active subscribers, new subscribers per day, and active trial counts.
Monthly churn rate trend to monitor subscriber retention.
See the full list of RevenueCat metrics with chart types and descriptions.
## Next Steps
Deliver RevenueCat charts to your Slack channels with AI summaries in the thread.
Schedule RevenueCat subscription reports to any inbox or distribution list.
# RevenueCat charts
Source: https://docs.chartcastr.com/integrations/sources/revenuecat/available-charts
Browse all RevenueCat charts in Chartcastr including MRR, revenue per day, active subscribers, new subscribers, active trials, and churn rate.
Chartcastr supports **6 pre-built RevenueCat metrics** across three categories. Each metric is delivered with an AI-generated summary tailored to subscription analytics.
## Revenue
| Metric | Chart Type | Description |
| ----------------------------- | ---------- | ----------------------------------- |
| **Monthly Recurring Revenue** | Line | MRR trend over the last 30 days |
| **Revenue Per Day** | Bar | Daily revenue over the last 30 days |
## Subscribers
| Metric | Chart Type | Description |
| ---------------------- | ---------- | --------------------------------------------- |
| **Active Subscribers** | Line | Active subscriber count over the last 30 days |
| **New Subscribers** | Bar | New subscribers per day over the last 30 days |
| **Active Trials** | Line | Active trial count over the last 30 days |
**New Subscribers** and **Active Trials** require a RevenueCat paid plan.
## Churn
| Metric | Chart Type | Description |
| -------------- | ---------- | ---------------------------------------------- |
| **Churn Rate** | Line | Monthly churn rate trend over the last 30 days |
**Churn Rate** requires a RevenueCat paid plan.
## AI-Powered Summaries
Every RevenueCat chart is delivered with an AI-generated summary specific to the subscription metric:
* **MRR**: revenue trajectory, growth rate, acceleration or deceleration signals
* **Revenue Per Day**: daily spikes, weekend vs weekday patterns, anomalies
* **Active Subscribers**: net subscriber growth, plateau detection, milestone tracking
* **New Subscribers**: acquisition trends, campaign impact, seasonal patterns
* **Active Trials**: trial volume shifts, conversion pipeline health
* **Churn Rate**: retention health, trend direction, early warning signals
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Savio source
Source: https://docs.chartcastr.com/integrations/sources/savio
Connect Savio to Chartcastr for automated product-feedback charts. Track feedback volume, top feature requests, customer-type breakdowns, and more.
## Overview
Use [Savio](https://www.savio.io) as a data source for Chartcastr. Savio centralises customer feedback and feature requests from Slack, HubSpot, Intercom, Zendesk, Salesforce, Help Scout, and other tools. Chartcastr pulls feedback, feature-request, contact, and company data from the Savio API and renders scheduled charts to Slack or email.
Chartcastr connects with read-only access using a per-account API token.
## Setup
In Savio, go to **API Settings** ([direct link](https://www.savio.io/app/accounts/api-access)) and copy your API token.
In Chartcastr, open **New Source** and select **Savio**. Paste your API token and click **Test & Connect**. Chartcastr validates the token against the Savio API before saving.
Pick from feedback / feature-request / contact / company volume charts, an activity overlay (multi-series), breakdowns by customer type or source tool, status distribution for feature requests, or top feature requests by linked-feedback count.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr ships **9 pre-built Savio metrics** across four categories.
Daily counts for feedback, feature requests, contacts, and companies over the last 30 days.
Pick any of feedback, feature requests, contacts, and companies and overlay them as lines on a single chart.
Feedback by customer type, feedback by source tool, and feature requests by status.
Top 10 feature requests by linked feedback count.
See the full list of Savio metrics with chart types and descriptions.
## Activity Overlay
The **Activity Overlay** chart renders feedback, feature requests, contacts, and companies as separate lines on the same chart. At setup, pick any combination of those four series — Chartcastr fetches each from the matching Savio endpoint and overlays them with consistent date buckets.
This is the right choice when you want a single weekly "Savio pulse" rather than four separate charts. The series you pick at setup are frozen for that source; create additional sources to compare different combinations.
## Next Steps
Deliver Savio charts to your Slack channels with AI summaries in the thread.
Schedule Savio feedback reports to any inbox or distribution list.
# Savio charts
Source: https://docs.chartcastr.com/integrations/sources/savio/available-charts
Browse all Savio charts in Chartcastr — feedback volume, feature request growth, customer-type breakdowns, status distributions, and top feature requests.
Chartcastr supports **9 pre-built Savio metrics** across four categories. Each metric is delivered with an AI-generated summary tailored to product feedback.
## Volume (Per Day)
| Metric | Chart Type | Description |
| ---------------------------- | ---------- | ----------------------------------------------------------- |
| **Feedback Per Day** | Line | New feedback items created each day over the last 30 days |
| **Feature Requests Per Day** | Line | New feature requests created each day over the last 30 days |
| **Contacts Per Day** | Line | New contacts added each day over the last 30 days |
| **Companies Per Day** | Line | New companies added each day over the last 30 days |
## Activity Overlay
| Metric | Chart Type | Description |
| -------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Activity Overlay** | Line (multi-series) | Pick any of feedback, feature requests, contacts, and companies and overlay them as lines on a single chart (last 30 days) |
At setup, pick 1–4 series to include. The selection is frozen for that source — create additional sources to compare different combinations.
## Breakdowns
| Metric | Chart Type | Description |
| ------------------------------ | ---------- | ---------------------------------------------------------------------------------------------------------- |
| **Feedback by Customer Type** | Bar | Breakdown of last-30-day feedback by customer type (Active, Churned, Prospect, Lost Deal, Internal, Other) |
| **Feedback by Source Tool** | Bar | Where last-30-day feedback came from (Slack, Intercom, Chrome extension, API, etc.) |
| **Feature Requests by Status** | Bar | Count of feature requests in each status (Untriaged → Shipped) |
## Top Items
| Metric | Chart Type | Description |
| ------------------------------------ | ---------- | --------------------------------------------------------------------- |
| **Top Feature Requests by Feedback** | Bar | Top 10 feature requests ranked by the number of linked feedback items |
## AI-Powered Summaries
Every Savio chart is delivered with an AI-generated summary specific to the metric:
* **Volume**: feedback spikes, growth signals, week-on-week change
* **Activity Overlay**: which signals are growing fastest, divergences between feedback and customer growth
* **Breakdowns**: which customer types are talking most, which channels deliver the most feedback
* **Top Feature Requests**: shifts in priority, emerging asks, candidates for roadmap inclusion
# Shopify source
Source: https://docs.chartcastr.com/integrations/sources/shopify
Connect your Shopify store to Chartcastr for automated revenue, order, and customer charts. View default reports and schedule delivery to your team.
**Private Beta** — Shopify integration is currently in private beta. [Contact us](mailto:support@chartcastr.com) to request access.
**Paid Feature** — Shopify is available on all paid plans (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Use Shopify as a data source for Chartcastr. Connect your store via OAuth and Chartcastr will pull revenue, order, and customer metrics to generate charts delivered automatically to your destinations.
Chartcastr connects with read-only access to your Shopify store — no write permissions required.
## Setup
In Chartcastr, go to [Sources](https://chartcastr.com/admin/sources) and select **Shopify**. Click **Connect** and complete the OAuth flow. You will be asked to authorise read-only access to orders, customers, and analytics.
Choose which metric type you want to track. Each metric becomes its own pulse source. You can add multiple metrics to send different charts on different schedules.
Go to [Connections](https://chartcastr.com/admin/connections) → **New Connection**. Select your Shopify source, pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries. Most teams send revenue and order metrics daily and customer metrics weekly.
## Available Reports
Chartcastr supports all **\~157 default reports** that Shopify manages and maintains — the same reports available in your Shopify Analytics dashboard. These are curated and kept up to date by Shopify. Custom reports (build-your-own queries) are coming soon.
See the full catalogue of Shopify's built-in reports with recommended chart types and descriptions.
## Next Steps
Deliver Shopify charts to your Slack channels with AI summaries in the thread.
Schedule Shopify reports to any inbox or distribution list.
# Shopify default reports
Source: https://docs.chartcastr.com/integrations/sources/shopify/default-reports
Browse all built-in Shopify reports in Chartcastr including total sales, order count, average order value, customer growth, and product breakdowns.
Chartcastr supports all **\~157 default reports** that Shopify manages and maintains across their analytics platform. These are the same reports available in your Shopify admin under Analytics — curated, maintained, and kept up to date by Shopify.
**Custom reports** (build-your-own ShopifyQL queries) are coming soon. For now, Chartcastr delivers charts for all of Shopify's built-in default reports out of the box.
## How Default Reports Work
Shopify manages a catalogue of \~157 analytics reports across categories like finances, acquisition, behavior, and customers. These reports are available to all Shopify stores and are updated as Shopify evolves its analytics platform. Chartcastr connects to this data via ShopifyQL and delivers it as automated charts to Slack, email, or any other destination.
When you create a Shopify pulse, you select a report from this catalogue. Chartcastr fetches the underlying data, renders a chart, and delivers it with an AI-generated summary on your schedule.
## Featured Reports
The following reports have been specifically optimised with tailored chart types and AI context for the best out-of-the-box experience. These are recommended as starting points.
### Finances
Revenue, orders, profit, and payment metrics.
| Report | Chart Type | Description |
| ------------------------------- | ---------- | ---------------------------------------------------- |
| `revenue.daily` ⭐ | Line | Net and total sales over the last 30 days |
| `orders.daily` | Bar | Order count by day |
| `ordersVsRevenue` | Combo | Combo chart with order bars and revenue line overlay |
| `finances.grossSales` | Line | Gross sales before discounts and returns |
| `finances.grossProfit` | Line | Gross profit (net sales minus cost of goods sold) |
| `finances.discounts` | Bar | Total discount amounts applied to orders |
| `finances.netPayments` | Line | Net payments received after refunds |
| `finances.netPaymentsByGateway` | Bar | Net payments broken down by payment gateway |
| `finances.netPaymentsByMethod` | Bar | Net payments broken down by payment method |
### Acquisition
Traffic and visitor metrics to understand where your customers come from.
| Report | Chart Type | Description |
| -------------------------------- | ---------- | ------------------------------------ |
| `acquisition.sessionsOverTime` | Line | Total store sessions by day |
| `acquisition.visitorsOverTime` | Line | Unique visitors by day |
| `acquisition.sessionsByLocation` | Bar | Sessions grouped by customer country |
| `acquisition.sessionsByReferrer` | Bar | Sessions grouped by referral source |
### Behavior
Engagement and conversion metrics to understand what visitors do on your store.
| Report | Chart Type | Description |
| --------------------------------- | ---------- | ---------------------------------------------------- |
| `behavior.bounceRate` | Line | Percentage of sessions that viewed only one page |
| `behavior.conversionRate` | Line | Percentage of sessions that resulted in a purchase |
| `behavior.checkoutConversionRate` | Line | Percentage of checkouts that resulted in a purchase |
| `behavior.sessionsByDevice` | Bar | Sessions grouped by device (desktop, mobile, tablet) |
| `behavior.sessionsByLandingPage` | Bar | Sessions grouped by entry page URL |
### Customers
Customer acquisition, retention, and segmentation metrics.
| Report | Chart Type | Description |
| --------------------------------- | ----------- | ---------------------------------------------------- |
| `customers.newVsReturning` | Stacked Bar | New vs returning customer breakdown |
| `customers.newOverTime` | Bar | New customers acquired per day |
| `customers.returningRateOverTime` | Line | Rate of customers returning to make another purchase |
| `customers.byLocation` | Bar | Customer count grouped by country |
| `customers.newSales` | Line | Net sales attributed to new customers over time |
⭐ `revenue.daily` is the recommended starting report for most stores. It gives you a clear view of net and total sales trends and pairs well with a daily Slack delivery.
## Shopify-Managed vs Custom Reports
| Type | Status | Description |
| ----------------------------------- | ------------- | --------------------------------------------------------------------- |
| **Shopify default reports** (\~157) | Available now | Reports managed and maintained by Shopify in your Analytics dashboard |
| **Custom reports** | Coming soon | Build-your-own reports using ShopifyQL queries |
Shopify's default reports cover the full range of e-commerce analytics — from sales and payments to sessions, conversions, and customer cohorts. Chartcastr gives you automated chart delivery and AI summaries on top of all of them.
## AI-Powered Summaries
Every report is delivered with an AI-generated summary tailored to the specific metric. For example, a revenue report will highlight week-over-week trends and the impact of promotions, while a conversion rate report will benchmark against industry averages and flag checkout friction.
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
## Requesting More Reports
Let us know which Shopify reports you want prioritised and we'll add them to the featured list.
# Spotify Ads
Source: https://docs.chartcastr.com/integrations/sources/spotify
Connect Spotify Ads as a data source for automated campaign performance reports — impressions, clicks & spend
**Paid Feature** — Spotify Ads is available on all paid plans (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Use Spotify Ads as a data source for Chartcastr. Connect via OAuth and pull daily impressions, clicks, and spend across your Spotify Ads Manager campaigns. Chartcastr delivers these metrics as charts to Slack or email on your schedule.
Chartcastr connects with read-only scopes — we never modify campaigns, audiences, or budgets.
## Setup
In Chartcastr, go to [Sources](https://chartcastr.com/admin/sources) and select **Spotify Ads**. Click **Connect** and complete the OAuth flow.
If your Spotify login owns multiple Ads Manager accounts, select the one you want to chart.
Pick from Ad Impressions, Ad Clicks, or Ad Spend — each tracks daily values over the trailing 30-day window.
Go to [Connections](https://chartcastr.com/admin/connections) → **New Connection**. Select your Spotify Ads source, pick a destination (Slack channel or email), set the frequency, and optionally enable AI summaries.
## Available Charts
See the full list of Spotify Ads metrics with chart types and descriptions.
## Data & Permissions
Chartcastr requests the following Spotify OAuth scopes (all read-only):
| Scope | Purpose |
| ------------------- | -------------------------------------------------- |
| `user-read-private` | Identify the connected Spotify user |
| `user-read-email` | Display the user's email in the connection details |
The Ads API uses the same OAuth token — access is determined at runtime by whether your Spotify account owns an Ads Manager account.
### What data does Chartcastr access?
* **Ads reporting**: Daily impressions, clicks, and spend per ad account. We do not read individual creatives, audiences, or budgets.
Chartcastr does **not** modify your Spotify library, follows, playlists, or any campaign settings.
## Next Steps
Deliver Spotify Ads charts to your Slack channels with AI summaries in the thread.
Schedule Spotify Ads reports to any inbox or distribution list.
## FAQ
Ads metrics only appear when the connected Spotify account has at least one ad account in Spotify Ads Manager. Make sure you're connecting with an account that has Ads access.
Not via the Spotify integration. Detailed artist analytics (monthly listeners, daily streams, save rate, audience demographics) require Spotify's partner APIs (reserved for labels and distributors). For cross-platform artist analytics, check out the **Chartmetric** integration which aggregates data from 20+ platforms.
Data is fetched fresh from Spotify every time a pulse fires. Chartcastr does not cache or store your ads data between runs.
Spotify Ads charts default to a trailing 30-day window with daily granularity.
# Available Charts
Source: https://docs.chartcastr.com/integrations/sources/spotify/available-charts
All Spotify Ads metrics available in Chartcastr — campaign performance delivered to Slack & email
Chartcastr supports **3 Spotify Ads metrics**, all unlocked by a single OAuth flow.
## Spotify Ads
| Metric | Chart Type | Description |
| ---------------------------- | ---------- | ------------------------------------------------------------------------- |
| **Ad Impressions Over Time** | Line | Daily impressions across your Spotify Ads campaigns — top-of-funnel reach |
| **Ad Clicks Over Time** | Line | Daily clicks across your Spotify Ads campaigns — engagement signal |
| **Ad Spend Over Time** | Line | Daily spend across your Spotify Ads campaigns — budget pacing |
Spotify Ads metrics only appear in the metric picker when the connected Spotify account owns at least one Ads Manager account. If you don't see them, reconnect with an account that has Ads access.
## AI-Powered Summaries
Every Spotify Ads chart is delivered with an AI-generated summary that spots day-of-week patterns, recent spikes, and budget pacing concerns.
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Triple Whale source
Source: https://docs.chartcastr.com/integrations/sources/triple-whale
Connect Triple Whale to Chartcastr for automated e-commerce metrics charts. Track Blended ROAS, MER, total sales, ad spend, CAC, and AOV delivered to Slack or email.
## Overview
Use Triple Whale as a data source for Chartcastr. Connect your Triple Whale account with an **API key** and Chartcastr will pull Summary Dashboard metrics — Blended ROAS, New Customer ROAS, MER, total and net sales, ad spend, gross profit, contribution margin, CAC, NCPA, AOV, orders, new customers, and more — to generate charts delivered automatically to Slack or email.
Triple Whale is the leading DTC e-commerce analytics and attribution platform. Chartcastr connects with read-only access via Triple Whale's API (`x-api-key`) — no pixel changes required.
Triple Whale is available on Chartcastr's **paid plans**. Free plans can forward a single **Total Sales** metric (delivered without AI analysis).
## Setup
Open your [Triple Whale API keys page](https://app.triplewhale.com/api-keys) and click **Generate**. Give the key a description and grant the **Summary Page: Read** scope (Chartcastr only reads summary metrics). Copy the key.
Your shop domain is the Shopify domain Triple Whale is scoped to (e.g. `example.myshopify.com`). You can find it in your [Triple Whale store settings](https://app.triplewhale.com/store-settings/general).
In Chartcastr, go to **Admin → Settings → Source Integrations**, find **Triple Whale**, click **Connect**, and paste your API key plus your shop domain. Chartcastr validates the key before saving it (encrypted at rest).
Choose which metric to track. Each metric becomes its own source. You can add multiple sources to send different charts on different schedules.
Pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **18 pre-built Triple Whale metrics** across three categories.
Total Sales, Blended ROAS, Triple Whale (Pixel) ROAS, New Customer ROAS, MER, Net Sales, Ad Spend, Gross Profit, and Contribution Margin.
Orders, New Customers, CAC, NCPA, Average Order Value, Customer Lifetime Value, Store Conversion Rate, and Repeat Purchase Rate.
Ad Spend vs Total Sales — a dual-axis view of daily spend against revenue.
See the full list of Triple Whale metrics with chart types and descriptions.
## Next Steps
Deliver Triple Whale charts to your Slack channels with AI summaries in the thread.
Schedule Triple Whale e-commerce reports to any inbox or distribution list.
# Triple Whale available charts
Source: https://docs.chartcastr.com/integrations/sources/triple-whale/available-charts
The full list of Triple Whale metrics available in Chartcastr, with chart types and descriptions.
Chartcastr supports 18 pre-built Triple Whale metrics. Each metric becomes its own source and can be delivered on its own schedule to Slack or email.
**Total Sales** is available on all plans (including free, delivered without AI analysis). Every other metric requires a paid plan.
## Performance
| Metric | Chart type | Description |
| -------------------------------- | ---------- | ------------------------------------------------------------- |
| Total Sales | Line | Gross store revenue over time — your top-line sales figure |
| Blended ROAS | Line | Order revenue divided by total ad spend across all channels |
| Triple Whale ROAS (Pixel) | Line | Pixel-attributed return on ad spend — first-party attribution |
| New Customer ROAS | Line | Return on ad spend from first-time customers |
| MER (Marketing Efficiency Ratio) | Line | Total sales divided by total ad spend |
| Net Sales | Line | Revenue after refunds and discounts over time |
| Ad Spend | Line | Total blended advertising spend across all channels |
| Gross Profit | Line | Revenue minus cost of goods sold over time |
| Contribution Margin | Line | Gross profit minus variable costs (spend, fees, shipping) |
## Customers
| Metric | Chart type | Description |
| ------------------------------------ | ---------- | -------------------------------------------------- |
| Orders | Bar | Total number of orders placed over time |
| New Customers | Bar | First-time customers acquired over time |
| CAC (Cost per Acquisition) | Line | Average advertising cost to acquire an order |
| NCPA (New Customer Acquisition Cost) | Line | Ad spend divided by new-customer orders |
| Average Order Value | Line | Average amount spent per order over time |
| Customer Lifetime Value | Line | Average customer lifetime value over time |
| Store Conversion Rate | Line | Percentage of sessions that resulted in an order |
| Repeat Purchase Rate | Line | Percentage of orders placed by returning customers |
## Overview
| Metric | Chart type | Description |
| ----------------------- | ---------- | ------------------------------------------------- |
| Ad Spend vs Total Sales | Combo | Daily ad spend against total sales on a dual axis |
# Typeform source
Source: https://docs.chartcastr.com/integrations/sources/typeform
Connect Typeform to Chartcastr for automated form response charts. Track submission volume, completion rates, and response trends over time.
## Overview
Use Typeform as a data source for Chartcastr. Connect your Typeform workspace via OAuth and Chartcastr will pull form response metrics — daily responses, completion rates, average completion time, and response volume by form — and deliver them as automated charts to Slack or email.
Chartcastr connects with **read-only** access to your Typeform workspace. No write permissions are requested.
## Setup
In Chartcastr, go to [Sources](https://chartcastr.com/admin/sources) and select **Typeform**. Click **Connect** and complete the OAuth flow. You will be asked to authorise read-only access to your forms, responses, and workspace.
Choose which metric you want to track. Each metric becomes its own pulse source — you can add multiple to send different charts on different schedules.
For form-specific metrics (daily responses, completion rate, average completion time), pick the form you want to track. Workspace-level metrics like **Responses by Form** aggregate across all forms automatically.
Go to [Connections](https://chartcastr.com/admin/connections) and click **New Connection**. Select your Typeform source, pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **4 pre-built Typeform metrics** across responses and forms.
Responses per day, completion rate, and average completion time.
Total responses per form across your workspace (top 10).
See the full list of Typeform metrics with chart types and descriptions.
## Data & Permissions
Chartcastr requests the following Typeform OAuth scopes:
| Scope | Purpose |
| ----------------- | ------------------------------------------------- |
| `accounts:read` | Account information for workspace identification |
| `forms:read` | List and read form definitions |
| `responses:read` | Read form response data for chart generation |
| `workspaces:read` | Access workspace metadata |
| `offline` | Enables refresh tokens for long-lived connections |
No write access is requested. Chartcastr cannot create, modify, or delete any data in your Typeform account.
## Token Refresh
Typeform access tokens expire after approximately one week. Chartcastr handles token refresh automatically using the refresh token granted during the OAuth flow.
If your integration shows as **Disconnected**, re-authorise by going to [Sources](https://chartcastr.com/admin/sources) → your Typeform integration and clicking **Reconnect** in the Danger Zone.
## Next Steps
Deliver Typeform charts to your Slack channels with AI summaries in the thread.
Schedule Typeform reports to any inbox or distribution list.
# Typeform charts
Source: https://docs.chartcastr.com/integrations/sources/typeform/available-charts
Browse all Typeform survey charts in Chartcastr including response volume over time, completion rates, drop-off analysis, and per-question breakdowns.
Chartcastr supports **4 pre-built Typeform metrics** for tracking form performance.
## Responses
| Metric | Chart Type | Description |
| ----------------------- | ---------- | ------------------------------------------------------------------- |
| **Responses Per Day** ⭐ | Bar | Number of form responses received each day over the last 30 days |
| **Completion Rate** | Line | Percentage of started forms that were completed (last 30 days) |
| **Avg Completion Time** | Line | Average time (in minutes) to complete a form per day (last 30 days) |
⭐ **Responses Per Day** is the recommended starting metric — it tracks form engagement volume and pairs well with a daily or weekly Slack delivery.
## Forms
| Metric | Chart Type | Description |
| --------------------- | ---------- | ------------------------------------------------------- |
| **Responses by Form** | Bar | Total responses per form across your workspace (top 10) |
Form-specific metrics (responses per day, completion rate, avg completion time) require you to select a specific form when creating the source. The **Responses by Form** metric aggregates across all forms in your workspace automatically.
## AI-Powered Summaries
Every Typeform chart is delivered with an AI-generated summary specific to the form metric:
* **Responses Per Day**: volume trends, day-of-week patterns, campaign correlation
* **Completion Rate**: drop-off signals, form length impact, mobile vs desktop patterns
* **Avg Completion Time**: form complexity signals, question-level friction indicators
* **Responses by Form**: top-performing forms, engagement distribution
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Typefully source
Source: https://docs.chartcastr.com/integrations/sources/typefully
Connect Typefully to Chartcastr for automated social media performance charts. Track post engagement, reach, follower growth, and publishing trends.
**Paid Feature** — Typefully is available on Chartcastr paid plans. [See pricing](https://chartcastr.com/pricing).
**Typefully paid plan required** — Analytics metrics (engagement, impressions, top posts) require a paid Typefully subscription (Creator or higher). Chartcastr will connect on any Typefully plan, but chart data will only be available once analytics access is enabled on the Typefully side.
## Overview
Use Typefully as a data source for Chartcastr. Connect your Typefully account to turn post performance into scheduled charts covering engagement, impressions, and publishing cadence.
Chartcastr connects with read-only access to your Typefully analytics data.
## Setup
In Chartcastr, create a new source and choose **Typefully**. Complete the OAuth flow to authorise access.
Choose the social metric you want to track. Each metric becomes its own source.
Pick a destination, set your schedule, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **7 pre-built Typefully metrics** across engagement, reach, and posts.
Total engagement, likes, comments, and shares over time.
Impressions over time.
Top posts by engagement and posts published per day.
See the full list of Typefully metrics with chart types and descriptions.
# Typefully charts
Source: https://docs.chartcastr.com/integrations/sources/typefully/available-charts
Browse all Typefully social media charts in Chartcastr including likes, retweets, impressions, follower growth, and top-performing post breakdowns.
Chartcastr supports **7 pre-built Typefully metrics** across three categories.
## Engagement
| Metric | Chart Type | Description |
| -------------------- | ---------- | -------------------------------------------------------------------------------------------- |
| **Total Engagement** | Bar | Total engagement including likes, comments, shares, and quotes per day over the last 30 days |
| **Likes Per Day** | Line | Likes on your posts per day over the last 30 days |
| **Comments Per Day** | Line | Comments or replies per day over the last 30 days |
| **Shares Per Day** | Line | Shares or reposts per day over the last 30 days |
## Reach
| Metric | Chart Type | Description |
| ----------------------- | ---------- | ---------------------------------------------------- |
| **Impressions Per Day** | Bar | Total post impressions per day over the last 30 days |
## Posts
| Metric | Chart Type | Description |
| --------------------------- | ---------- | ------------------------------------------------------------- |
| **Top Posts by Engagement** | Bar | Top 10 posts ranked by total engagement over the last 30 days |
| **Posts Published Per Day** | Bar | Number of posts published per day over the last 30 days |
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Umami Analytics source
Source: https://docs.chartcastr.com/integrations/sources/umami
Connect Umami to Chartcastr for automated privacy-friendly web analytics charts. Track visitor counts, pageviews, referrers, and device breakdowns.
## Overview
Use Umami as a data source for Chartcastr. Connect your Umami workspace with a website ID and API token, then deliver traffic and breakdown charts to Slack or email with AI-generated analysis.
Chartcastr connects with read-only access to your Umami analytics data. No write permissions are requested.
## Setup
In Umami, go to **Settings → API Keys** and create a token with access to the website you want to report on.
Open the relevant site in Umami and copy the **Website ID** from the settings or site details screen.
In Chartcastr, create a new source and choose **Umami Analytics**. Enter your Umami base URL, website ID, and API token, then validate the connection.
Choose the traffic or breakdown metric you want to track. Each metric becomes its own source.
Pick a destination, choose your schedule, and optionally enable AI summaries.
## Available Metrics
Chartcastr supports **11 pre-built Umami metrics** across traffic trends and breakdowns.
Pageviews, visitors, sessions, bounce rate, and average visit duration over time.
Top pages, referrers, browsers, operating systems, devices, and countries.
See the full list of Umami metrics with chart types and descriptions.
## Next Steps
Deliver Umami charts to Slack with AI summaries in the thread.
Schedule Umami reports to any inbox or distribution list.
# Umami Analytics charts
Source: https://docs.chartcastr.com/integrations/sources/umami/available-charts
Browse all Umami web analytics charts in Chartcastr including visitor trends, pageview volume, browser and OS splits, and referrer breakdowns.
Chartcastr supports **11 pre-built Umami metrics** across two categories.
## Traffic
| Metric | Chart Type | Description |
| ---------------------- | ---------- | ------------------------------------------------------- |
| **Pageviews Per Day** | Bar | Total pageviews each day over the last 30 days |
| **Visitors Per Day** | Bar | Unique visitors each day over the last 30 days |
| **Sessions Per Day** | Bar | Total sessions each day over the last 30 days |
| **Bounce Rate** | Line | Estimated bounce rate trend over the last 30 days |
| **Avg Visit Duration** | Bar | Average visit duration in seconds over the last 30 days |
## Breakdowns
| Metric | Chart Type | Description |
| ------------------------- | ---------- | --------------------------------------------------------------- |
| **Top Pages** | Bar | Top 10 pages by view count over the last 30 days |
| **Top Referrers** | Bar | Top 10 traffic referrers by visitor count over the last 30 days |
| **Top Browsers** | Bar | Top 10 browsers by visitor count over the last 30 days |
| **Top Operating Systems** | Bar | Top 10 operating systems by visitor count over the last 30 days |
| **Top Devices** | Bar | Top device types by visitor count over the last 30 days |
| **Top Countries** | Bar | Top 10 countries by visitor count over the last 30 days |
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Xero accounting source
Source: https://docs.chartcastr.com/integrations/sources/xero
Connect Xero to Chartcastr for automated profit and loss, cash flow, accounts receivable, and payable charts. Setup and configuration guide.
**Early Access** — Xero integration is currently in early access. [Contact us](mailto:support@chartcastr.com) or [sign up](https://chartcastr.com/sign-up) to request access.
**Paid Feature** — Xero is available on all paid plans (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
**Two-factor authentication required** — Xero requires 2FA on every account that connects to it. If your Chartcastr account doesn't have 2FA enabled, you'll be redirected to enable it before the OAuth flow can complete. See [Two-Factor Authentication](#two-factor-authentication) below.
## Overview
Use Xero as a data source for Chartcastr. Connect your Xero organisation via OAuth and Chartcastr will pull financial metrics directly from your accounting reports — P\&L, cash flow, aged receivables, and aged payables — and deliver them as automated charts to Slack or email.
Chartcastr connects with **read-only** access to your Xero organisation. No write permissions are requested.
## Setup
Xero requires 2FA on every connected account. If you haven't already enabled 2FA on your Chartcastr account, you'll be redirected to a setup page when you start the connection — scan the QR code with an authenticator app (1Password, Authy, Google Authenticator, etc.) and complete the verification before continuing.
In Chartcastr, go to [Sources](https://chartcastr.com/admin/sources) and select **Xero**. Click **Connect** and complete the OAuth flow. You will be asked to authorise read-only access to accounting reports and contacts.
Choose which financial metric you want to track. Each metric becomes its own pulse source — you can add multiple to send different charts on different schedules. See [Available Charts](/integrations/sources/xero/available-charts) for the full list.
Go to [Connections](https://chartcastr.com/admin/connections) → **New Connection**. Select your Xero source, pick or add a destination (Slack channel or email), set the delivery frequency, and optionally enable AI summaries. Most teams send P\&L metrics weekly and cash/receivables metrics daily or on a Monday morning.
## Available Charts
Chartcastr supports **11 pre-built Xero metrics** across four categories, each backed by a specific Xero report endpoint.
Revenue, gross profit, net profit, and revenue vs expenses — all from your Profit & Loss report.
Operating expense breakdown by account category from your P\&L.
Cash position (closing balances) and cash in vs out across all bank accounts.
Aged receivables and aged payables — outstanding invoices and bills bucketed by overdue days.
See the full list of Xero metrics with chart types, descriptions, and AI context hints.
## Data & Permissions
Chartcastr requests the following Xero OAuth scopes:
| Scope | Purpose |
| -------------------------- | --------------------------------------------- |
| `accounting.reports.read` | P\&L, Bank Summary, Aged Receivables/Payables |
| `accounting.settings.read` | Organisation currency and settings |
| `accounting.contacts.read` | Contact data for Streams (real-time events) |
No write access is requested. Chartcastr cannot create, modify, or delete any data in your Xero organisation.
## Two-Factor Authentication
Xero's API terms require two-factor authentication on every account that connects to a Xero organisation. Chartcastr enforces this before any Xero OAuth flow begins.
**How it works:**
* When you click **Connect** on the Xero source, Chartcastr checks whether your account has 2FA enabled (via Clerk).
* If 2FA is **not** enabled, you're redirected to `/admin/security/mfa-required` where you can set up an authenticator app inline. Once 2FA is active, you'll be sent back to finish the Xero OAuth flow automatically.
* If 2FA is already enabled, the OAuth flow proceeds normally and this step is invisible.
**Setting up 2FA:**
1. On the MFA-required page, scan the QR code with any TOTP authenticator app (1Password, Authy, Google Authenticator, Microsoft Authenticator).
2. Enter the 6-digit code to verify.
3. Save your backup codes somewhere safe — you'll need one if you lose access to your authenticator.
You can also enable 2FA proactively at any time from your [Account Security](https://chartcastr.com/admin/security) page.
This requirement only applies to Xero. Other sources do not require 2FA, but enabling it is strongly recommended for all production accounts.
## Token Refresh
Xero access tokens expire after 30 minutes and refresh tokens expire after **60 days of inactivity**. Chartcastr handles token refresh automatically:
* Tokens are refreshed on-demand when a chart runs
* A background job proactively refreshes tokens that are approaching 60 days without activity
* You will receive an email warning if your token is at risk of expiring
If your integration shows as **Disconnected**, re-authorise by going to [Sources](https://chartcastr.com/admin/sources) → **Xero** and clicking **Reconnect**.
## Real-Time Events with Streams
In addition to scheduled charts, Xero also supports [Streams](/streams/xero) — real-time webhook events forwarded to Slack the instant they happen. New invoices, contact changes, and credit notes can be routed to any Slack channel without polling.
Forward Xero invoice, contact, and credit note events to Slack in real-time.
## Next Steps
Deliver Xero charts to your Slack channels with AI summaries in the thread.
Schedule Xero reports to any inbox or distribution list.
# Xero accounting charts
Source: https://docs.chartcastr.com/integrations/sources/xero/available-charts
Browse all Xero accounting charts in Chartcastr including profit and loss trends, cash balance, accounts receivable aging, and payable breakdowns.
Chartcastr supports **11 pre-built Xero metrics** pulled from four Xero report endpoints. Each metric maps to a specific chart type and is delivered with an AI-generated summary tailored to that financial indicator.
## Profitability
All profitability metrics are sourced from your Xero **Profit & Loss** report, covering the last 12 months by default (1st of each month to the current date).
| Metric | Chart Type | Description |
| ------------------------------ | ---------- | ----------------------------------------------------------------------------------------------------- |
| **Revenue (Monthly)** ⭐ | Line | Monthly total revenue trend from your P\&L |
| **Gross Profit (Monthly)** | Line | Monthly gross profit — revenue minus cost of sales |
| **Net Profit/Loss (Monthly)** | Bar | Monthly net profit or loss after all operating expenses |
| **Revenue vs Expenses** | Combo | Revenue line overlaid with monthly expense bars |
| **Cost of Sales % of Revenue** | Line | Monthly cost of sales as a percentage of revenue — shows how much of each dollar goes to direct costs |
⭐ **Revenue (Monthly)** is the recommended starting metric for most Xero users. It gives an immediate view of revenue trends and pairs well with a weekly Monday delivery to `#finance`.
## Expenses
| Metric | Chart Type | Description |
| --------------------- | ---------- | ----------------------------------------------------------------- |
| **Expense Breakdown** | Bar | Operating expenses broken down by account category from your P\&L |
The expense breakdown chart shows each expense account category as a separate bar, making it easy to see which areas are growing month-over-month.
## Cash & Banking
Cash metrics are sourced from your Xero **Bank Summary** report.
| Metric | Chart Type | Description |
| ------------------ | ----------- | ------------------------------------------------------------- |
| **Cash Position** | Bar | Current closing balances across all connected bank accounts |
| **Cash In vs Out** | Stacked Bar | Cash received versus cash spent, stacked across bank accounts |
Cash position shows the **most recent closing balance** for each bank account. Cash In vs Out shows the **movement** over the reporting period — useful for spotting months where outflows exceeded inflows.
## Receivables & Payables
Aged receivables and payables are sourced from the Xero **Aged Receivables** and **Aged Payables** reports.
| Metric | Chart Type | Description |
| -------------------- | ---------- | ------------------------------------------------------------------------------------- |
| **Aged Receivables** | Bar | Outstanding customer invoices bucketed by age: Current, 30, 60, 90+ days |
| **Aged Payables** | Bar | Outstanding supplier bills bucketed by age: Current, 30, 60, 90+ days |
| **Debtor Days** | Line | Average number of days customers take to pay — tracks collection efficiency over time |
The aging buckets let you immediately see your collection health at a glance:
* **Current** — invoices not yet due
* **1–30 days** — recently overdue
* **31–60 days** — follow-up required
* **61–90 days** — escalation recommended
* **90+ days** — high collection risk
A healthy receivables profile has the majority in the **Current** bucket. If 60+ day buckets are growing month-over-month, the AI summary will flag this as a collection risk.
## AI-Powered Summaries
Every Xero chart is delivered with an AI-generated summary specific to the financial metric. The AI is given context about what each indicator means and what to look for — for example:
* **Revenue**: seasonal patterns, week-over-week growth, notable dips and their likely causes
* **Net Profit**: months where the business operated at a loss, expense pressure signals
* **Cost of Sales %**: rising or falling margin trends, efficiency changes in direct costs
* **Aged Receivables**: percentage of overdue vs current, collection risk by bucket
* **Debtor Days**: collection speed trends, comparison to payment terms, cash flow impact
* **Cash Position**: accounts with declining balances, cash runway signals
Learn how Chartcastr generates summaries, what context it uses, and how to get the most out of AI analysis.
# Quickstart
Source: https://docs.chartcastr.com/quickstart
Set up your first Chartcastr connection in under five minutes. Connect a data source, choose a destination, and schedule your first automated pulse.
## 1. Sign In
Go to [chartcastr.com/admin](https://chartcastr.com/admin) and sign in with your Google account.
Don't have an account yet? [Sign up for free](https://chartcastr.com/admin/sign-up).
## 2. Add a Source
Go to [Sources](https://chartcastr.com/admin/sources) and connect your first data source. Pick an integration type — Google Sheets, Shopify, Chart URL, and more — then follow the prompts.
Chartcastr only requests read-only access to your data. We never modify your sources.
## 3. Create a Connection
Go to [Connections](https://chartcastr.com/admin/connections) → **New Connection**, then:
1. Select your source
2. Pick or add a destination (Slack channel or email) — you can connect Slack right here
3. Set a schedule (daily, weekly, or a custom cadence)
4. Optionally enable **AI Summary** for intelligent insights
For private Slack channels, invite the bot first with `/invite @Chartcastr`.
## 4. Test It
Click **Send Test** to verify everything works, then enable the schedule.
That's it! Your charts will now be delivered automatically on schedule.
## What's Next?
Connect HubSpot, Shopify, Notion, or other data sources
Send charts to Teams, email, or webhooks
# Delivery and volume stats
Source: https://docs.chartcastr.com/stats/delivery
Track pulse delivery patterns, view your activity calendar, and monitor total deliveries over time. Identify peak sending days and trends at a glance.
The Overview tab shows your delivery fundamentals: how reliably your pulses are being delivered, what the daily volume looks like, and a long-range view of your activity.
## Delivery Volume Chart
A stacked area chart showing the daily breakdown of pulse deliveries over the selected period.
The three layers are:
| Layer | Colour | Meaning |
| ------------- | ------ | ----------------------------------------- |
| **Success** | Green | Pulse delivered with new data |
| **Unchanged** | Grey | Data source checked, no changes to report |
| **Failed** | Red | Delivery attempted but failed |
Hover over any point to see the exact daily breakdown.
**What to look for:**
* A healthy chart is mostly green and grey with minimal or no red.
* A growing red area means something needs attention — check your connection health in Settings.
* A chart that's mostly grey may mean your data doesn't change as often as you're checking. Consider reducing pulse frequency to cut noise.
* A chart that's mostly green means your schedule is well-matched to how often your data actually changes.
## Pulse Activity Calendar
A year-long heatmap (similar to a GitHub contribution graph) showing your pulse activity over the last 365 days. Each cell is one day, coloured by intensity.
Toggle between three views:
| View | What It Shows |
| ---------------- | ------------------------------------------- |
| **All** | Combined activity across all metrics |
| **Pulses** | Successful and unchanged deliveries per day |
| **Interactions** | Thread conversations and reactions per day |
Hover over any cell to see the exact counts and date.
**What to look for:**
* Consistent colour across weekdays means your schedules are running reliably.
* Gaps may indicate paused connections, outages, or weekends if you don't schedule weekend pulses.
* The **Interactions** view is useful for spotting which days generate the most discussion — this can help you time your most important pulses.
* Seasonal patterns may emerge over time as your team's data cadence becomes visible.
## Next Steps
See who's reacting and when they're most active.
Review the four key metrics.
# Engagement stats
Source: https://docs.chartcastr.com/stats/engagement
See who engages with your Chartcastr pulses, which emoji reactions they use, and when your audience is most active. Identify top viewers and trends.
The Engagement tab is available on Starter plans and above.
The Engagement tab helps you understand the human side of your pulses — who's reading them, how they're reacting, and when engagement peaks.
## Engagement Trend
A dual-axis chart tracking engagement over time:
* **Reaction count** (solid line) — the raw number of reactions per day
* **Engagement rate** (dashed line) — the percentage of delivered pulses that received reactions that day
**What to look for:**
* An upward trend in either line means your pulses are resonating more over time.
* Spikes often correlate with significant data changes — when a metric moves, people react.
* If reaction count grows but rate stays flat, you're sending more pulses (volume effect).
* If rate grows but count stays flat, fewer pulses are generating more engagement (quality effect — the better signal).
## Reaction Breakdown
A donut chart showing the distribution of reaction types across your pulses.
Reactions include:
* **Emoji reactions** — Slack emoji reactions (including custom workspace emojis)
* **Thumbs** — Thumbs up / thumbs down
* **Comments** — Text responses on the pulse
The top 8 reaction types are shown individually, with the rest grouped as "Other."
**What to look for:**
* Variety suggests genuine engagement rather than habitual clicking.
* Consistent thumbs-down on certain connections may mean the content needs refinement.
* Comments are the highest-signal engagement — someone took time to respond with words.
## Top Engagers
A leaderboard of the people who interact most with your pulses. For each person:
* **Reactions** — total in the period
* **Questions asked** — thread conversations they started
* **Last active** — when they last engaged
Starter plans show the top 3. Pro plans show the full top 10.
**What to look for:**
* If engagement is concentrated in one or two people, consider whether the right audience is seeing your pulses.
* People who ask questions are your most engaged users — they're actively using pulses for decisions.
* If a previously active person drops off, the data may no longer be relevant to them.
## Most Engaged Connections
A ranked list of your source-to-destination connections by feedback count, showing which data pipelines generate the most audience interaction.
**What to look for:**
* High-engagement connections are your most valuable — keep them healthy.
* Low-engagement connections might be going to the wrong channel, at the wrong time, or with data that doesn't prompt action.
* Use this to prioritise which connections to optimise first.
## Thread Conversations
A summary of pulse-driven conversations:
| Metric | Meaning |
| ----------------------------- | ----------------------------------------------------------------- |
| **Total Questions Asked** | Thread conversations started from pulses |
| **AI Response Rate** | Percentage of questions that received an AI response |
| **Avg per Pulse** | Average thread conversations per pulse (among those with threads) |
| **Pulse → Thread Conversion** | Percentage of delivered pulses that generated at least one thread |
**What to look for:**
* Thread conversion shows how often your pulses provoke questions — higher means thought-provoking data.
* AI response rate should be high. If it's dropping, something may need attention.
* Growing questions over time means your team is building a habit of interrogating their data.
## Best Time to Send
A heatmap grid showing engagement rates by day of week and hour of day.
* **X-axis**: Hours from 6am to 10pm
* **Y-axis**: Days of the week
* **Cell colour**: Darker = higher engagement rate at that time
Hover over any cell to see the exact engagement rate and sample size.
**What to look for:**
* Darker cells are your peak engagement windows — schedule your most important pulses there.
* Low sample sizes (few pulses sent at that time) mean the data isn't yet reliable for that cell.
* Patterns often emerge around team routines: morning standups, post-lunch reviews, end-of-week check-ins.
The heatmap becomes more useful as your pulse history grows. If most cells are empty, give it time.
## Next Steps
Check your delivery fundamentals.
Review the four key metrics.
# Stats overview
Source: https://docs.chartcastr.com/stats/overview
View a summary of pulse delivery volume, audience engagement rates, and overall performance metrics for your Chartcastr organization at a glance.
The Stats page gives you a complete picture of how your pulses are performing — from delivery reliability to audience engagement. Access it at **Admin → Stats** in your dashboard.
Stats are available on all plans. Some metrics require Starter or Pro plans — these are marked below.
## Date Range
Use the date range selector (7, 14, 30, or 90 days) to focus on the period that matters. Each KPI shows a delta comparison against the previous period of equal length, so you can spot trends at a glance.
Longer date ranges may be limited by your plan tier.
## KPI Cards
Four cards at the top give you an instant health check:
### Delivery Rate
The percentage of pulse runs that completed successfully or returned "unchanged."
**How it's calculated:** `(Success + Unchanged) / Total Runs`
Both outcomes are healthy — "unchanged" means the data source was checked but nothing new needed to be sent. That's the system working as designed, not a failure.
**What to look for:**
* Consistency is key. A stable, high rate means your connections and data sources are healthy.
* Sudden drops usually point to a connection issue — an expired token, API downtime, or changed permissions.
* A gradual decline may suggest a source that needs re-authentication.
### Pulses Delivered
The raw count of successful pulse deliveries in the selected period.
**What to look for:**
* This should roughly match what you expect given your connection schedules.
* If it's lower than expected, check if any connections are paused or failing.
* Growth over time is natural as you add more connections.
### Engagement Rate
Available on Starter plans and above.
The percentage of successfully delivered pulses that received at least one reaction (emoji, thumbs, or comment).
**How it's calculated:** `Pulses with Reactions / Successful Pulses`
**What to look for:**
* Any engagement is a positive signal — it means people are reading and responding.
* Rising rates suggest you're sending the right data to the right people at the right time.
* Low rates aren't necessarily bad — some pulses are purely informational and don't need a response.
### Active Audience
Available on Starter plans and above.
The count of unique people who interacted with your pulses — through reactions or thread conversations — in the selected period.
**What to look for:**
* Breadth matters. A pulse that engages 10 people is more impactful than one that gets 10 reactions from a single person.
* A growing active audience means your pulses are becoming part of more people's workflow.
## Tabs
The Stats page has two tabs:
Delivery volume chart and your pulse activity calendar.
Reactions, top engagers, best send times, and thread conversations.
## What "Good" Looks Like
There's no universal benchmark — what matters is the trend and context for your team. Some guiding principles:
* **Delivery Rate** — Aim for consistency. Dips are worth investigating, but a stable rate means healthy connections.
* **Engagement Rate** — Any engagement is good. A rising rate means you're dialling things in.
* **Active Audience** — Broad engagement is more valuable than deep engagement from one person. Growth here means pulses are becoming a team habit.
* **Pulses Delivered** — Should match your expectations. If not, check connection health.
# Meta Ads streams
Source: https://docs.chartcastr.com/streams/meta-ads
Stream real-time Meta Ads lead form submissions and ad status changes to Slack. Set up Facebook and Instagram ad event alerts with Chartcastr.
**Private Beta** — Meta Ads Streams is currently in private beta. [Contact us](mailto:support@chartcastr.com) to request access.
**Paid Feature** — Requires a connected [Meta Ads source](/integrations/sources/meta-ads) on any paid plan (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Once your Meta Ads account is connected, Chartcastr receives webhook events from Meta in real-time and forwards them to your configured Slack channels instantly — no polling, no delay.
This complements your [Meta Ads Pulses](/integrations/sources/meta-ads) (scheduled ad performance charts) by giving you immediate visibility into individual events as they happen.
| | Meta Ads Pulses | Meta Ads Streams |
| ---------------- | ---------------------------------------------------- | ----------------------------------------------- |
| **What you get** | Ad spend, ROAS, and performance charts on a schedule | Instant notification per event |
| **When** | Daily, weekly, or a custom cadence | The moment the event fires |
| **AI summary** | Yes — campaign analysis + context | No (single event notification) |
| **Best for** | Weekly performance reviews, spend tracking | Lead capture alerts, ad rejection notifications |
## Supported Events
| Event | Trigger |
| ---------------- | -------------------------------------------------------------------- |
| **New Lead** | Someone submits a lead form on your Facebook or Instagram ad |
| **Ad Issue** | A campaign, ad set, or ad is rejected or has delivery issues |
| **Ad Processed** | A campaign, ad set, or ad finishes processing after creation or edit |
You can route any combination of these to any Slack channel. For example:
* `#sales` → New Lead
* `#ads-ops` → Ad Issue + Ad Processed
* `#marketing` → all events
## What Gets Sent to Slack
Each Slack notification includes:
* **Event type and emoji** — e.g. `:clipboard: New Lead Submitted`
* **Key details** — Lead ID, form ID, object name, and type
* **Timestamp** of when the event occurred
* **Footer** — `via Chartcastr Streams · Meta Ads`
### Example notifications
**New lead submitted:**
```
📋 New Lead Submitted
Lead: 123456789
Form: 987654321
Ad: 111222333
Time: 8 Mar 2026, 10:15 am
via Chartcastr Streams · Meta Ads
```
**Ad rejected/has issues:**
```
⚠️ Campaign Has Issues
Campaign: Summer Sale 2026
via Chartcastr Streams · Meta Ads
```
**Ad finished processing:**
```
✅ Ad Set Processed
Ad Set: Lookalike — AU 25-44
via Chartcastr Streams · Meta Ads
```
## Setup
Go to [Sources → Meta Ads](/integrations/sources/meta-ads) and complete the Facebook OAuth flow. Chartcastr requests read access to your ad accounts and leads — no write permissions.
Navigate to [Streams](https://chartcastr.com/admin/streams) in your dashboard. If Meta Ads is connected and you have Slack set up, you'll see Meta Ads in the stream source list.
Click any Slack channel to choose which Meta Ads events it receives. Route leads to your sales channel, ad issues to your ads ops channel, or send everything to one place.
## Why Stream Leads to Slack?
Lead forms on Meta ads capture intent in the moment — but that intent fades fast. The longer a lead sits before someone follows up, the lower the conversion rate.
With Meta Ads Streams, the moment someone fills out your lead form, a notification lands in your team's Slack channel. Your sales team can follow up in minutes instead of hours or days.
This is especially valuable for:
* **Local service businesses** where speed-to-lead directly impacts close rate
* **B2B teams** running lead gen campaigns where high-intent prospects expect a fast response
* **Event promotions** where registrations need real-time tracking
## Why Stream Ad Issues?
Meta regularly reviews ads and can reject them for policy violations, or flag delivery issues that throttle your spend. Without real-time alerts, you might not notice a paused campaign until hours or days later — burning budget on underperforming alternatives or missing delivery entirely.
Ad Issue streams notify your team the moment something goes wrong, so you can fix creative, adjust targeting, or appeal a rejection before it impacts your numbers.
## Deduplication
Chartcastr deduplicates Meta webhook events using a key derived from the ad account ID, event timestamp, and change field. If Meta retries a delivery, the duplicate event is silently dropped — your Slack channels only receive each event once.
## Streams as Context for Meta Ads Pulses
When a notable Meta Ads event arrives via a Stream (e.g. a burst of leads from a new campaign), Chartcastr stores it as context attached to that moment in time.
When your next [Meta Ads Pulse](/integrations/sources/meta-ads) delivers your weekly performance chart, the AI can surface that event in its analysis:
> *"Lead volume spiked on Thursday — this aligns with 12 new lead form submissions captured via Streams that afternoon, coinciding with the launch of the Summer Sale campaign."*
This is automatic — no manual notes required. The stream event is captured, timestamped, and made available to the AI when it runs your next Pulse.
For the best context capture, make sure you have [AI summaries](/analysis/in-pulses) enabled on your Meta Ads Pulse connection. Without AI, stream context is stored but not surfaced in delivery.
# Streams overview
Source: https://docs.chartcastr.com/streams/overview
Streams deliver real-time webhook events from your data sources to Slack the moment they happen. Configure event types, channels, and formatting.
Streams is the real-time companion to Pulses. Pulses are scheduled — Streams are instant.
## What are Streams?
Streams forward events from your connected data sources directly into Slack channels the moment they happen — no Zapier, no n8n, no manual setup required.
Where a **Pulse** delivers a scheduled chart summary (daily revenue, weekly signups), a **Stream** delivers a notification for a single event the instant it occurs (a big order just came in, a refund was processed, a payment failed).
| | Pulses | Streams |
| ----------- | --------------------------------- | -------------------------- |
| **Timing** | Scheduled (daily, weekly, custom) | Real-time, instant |
| **Content** | Chart image + AI summary | Event notification |
| **Purpose** | Track trends over time | React to individual events |
## Available Sources
Stream invoices, contacts, and credit notes in real-time from your Xero organisation.
**Supported events:** New Invoice · Invoice Updated · New Contact · Contact Updated · New Credit Note · Credit Note Updated
Also see: [Xero Pulses (scheduled charts)](/integrations/sources/xero)
Stream orders, payments, fulfilments, cancellations, and refunds in real-time from your Shopify store.
**Supported events:** New Order · Order Paid · Fulfilled · Cancelled · Refund
Also see: [Shopify Pulses (scheduled charts)](/integrations/sources/shopify)
Stream lead submissions and ad status events in real-time from your Meta (Facebook/Instagram) ad accounts.
**Supported events:** New Lead · Ad Issue · Ad Processed
Also see: [Meta Ads Pulses (scheduled charts)](/integrations/sources/meta-ads)
## How Streams Work
Connect a supported source (e.g. Shopify) from the [Sources](https://chartcastr.com/admin/sources) page. This authorises Chartcastr to receive webhook events from that source.
Ensure you have a [Slack destination](/integrations/destinations/slack) configured. Streams are delivered to Slack channels.
In [Streams](https://chartcastr.com/admin/streams), choose which event types (topics) route to which Slack channels. You can set up multiple channels receiving different topics — e.g. `#orders` gets all order events, `#finance` only gets refunds and payments.
When an event fires in your source, Chartcastr receives it via webhook and immediately posts a formatted notification to your configured Slack channels.
## Streams as Context for Pulses
One of the most powerful uses of Streams is as **context for your AI-powered Pulses**.
When a large order comes in via a Stream, Chartcastr captures it as a data point. When your weekly revenue Pulse runs the following week, the AI can reference that event:
> *"Revenue spiked on Tuesday — this coincides with a large single-order purchase of \$8,400 from Acme Corp captured on that day."*
This turns your Pulses from simple chart deliveries into genuinely explained reports, grounded in real events from your data.
Context is captured automatically — no manual tagging required.
## Setting Up a Stream
Go to [Streams](https://chartcastr.com/admin/streams) in your admin dashboard.
The **By Channel** view shows:
* Channels already configured with active streams (bold, with topic badges)
* Other channels the bot is joined to but not yet configured (dimmed, with an **Add channel** option)
The **By Source** view shows each event type and which channels it routes to — useful for auditing what goes where.
Start with a single high-value topic (e.g. **New Order**) routed to one channel before expanding. It is easier to add more streams than to manage noise from too many.
# Shopify streams
Source: https://docs.chartcastr.com/streams/shopify
Stream real-time Shopify events to Slack including new orders, payments, fulfilments, and refunds. Configure event types and channel routing.
**Private Beta** — Shopify Streams is currently in private beta. [Contact us](mailto:support@chartcastr.com) to request access.
**Paid Feature** — Requires a connected [Shopify source](/integrations/sources/shopify) on any paid plan (Starter, Pro, Enterprise). [See pricing](https://chartcastr.com/pricing).
## Overview
Shopify is the first source supported by Streams. Once your store is connected, Chartcastr receives webhook events from Shopify in real-time and forwards them to your configured Slack channels instantly — no polling, no delay.
This complements your [Shopify Pulses](/integrations/sources/shopify) (scheduled chart summaries) by giving you immediate visibility into individual events as they happen.
| | Shopify Pulses | Shopify Streams |
| ---------------- | ---------------------------------- | ------------------------------ |
| **What you get** | Revenue/order charts on a schedule | Instant notification per event |
| **When** | Daily, weekly, or a custom cadence | The moment the event fires |
| **AI summary** | Yes — trend analysis + context | No (single event notification) |
| **Best for** | Weekly reviews, trend tracking | Real-time ops alerts |
## Supported Events
| Event | Trigger |
| ------------------- | ----------------------------------- |
| **New Order** | A new order is placed in your store |
| **Order Paid** | Payment is captured for an order |
| **Order Fulfilled** | An order's fulfilment is completed |
| **Order Cancelled** | An order is cancelled |
| **Refund Created** | A refund is issued on an order |
You can route any combination of these to any Slack channel. For example:
* `#ops-alerts` → New Order + Order Paid
* `#finance` → Refund Created
* `#ecommerce` → all events
## Setup
Go to [Sources → Shopify](/integrations/sources/shopify) and complete the OAuth flow. Chartcastr will request read access to orders and analytics — no write permissions.
Navigate to [Streams](https://chartcastr.com/admin/streams) in your dashboard. If Shopify is connected and you have Slack set up, you'll see the stream configuration UI.
In the **By Channel** tab, click any Slack channel to choose which Shopify events it receives. In the **By Source** tab, click any event type to see and edit which channels it routes to.
## Streams as Context for Shopify Pulses
When a notable Shopify event arrives via a Stream (e.g. a large single order), Chartcastr stores it as context attached to that moment in time.
When your next [Shopify Pulse](/integrations/sources/shopify) delivers your weekly revenue chart, the AI can surface that event in its analysis:
> *"Revenue on Wednesday was significantly above average — this aligns with a single large order of \$6,200 received that afternoon."*
This is automatic — no manual notes required. The stream event is captured, timestamped, and made available to the AI when it runs your next Pulse.
For the best context capture, make sure you have [AI summaries](/guides/ai-summaries) enabled on your Shopify Pulse connection. Without AI, stream context is stored but not surfaced in delivery.
# Xero streams
Source: https://docs.chartcastr.com/streams/xero
Stream real-time Xero accounting events to Slack including invoice creation, contact updates, and credit notes. Configure event types and channels.
**Paid Feature** — Xero Streams requires a connected [Xero source](/integrations/sources/xero) on any paid plan (Starter, Pro, Enterprise). If you haven't set that up yet, start there first. [See pricing](https://chartcastr.com/pricing).
## Overview
Once your Xero organisation is connected, Chartcastr receives webhook events from Xero in real-time and forwards them to your configured Slack channels instantly — no polling, no delay.
This complements your [Xero Pulses](/integrations/sources/xero) (scheduled financial charts) by giving you immediate visibility into individual accounting events as they happen.
| | Xero Pulses | Xero Streams |
| ---------------- | ------------------------------------------------ | ----------------------------------------------- |
| **What you get** | P\&L, cash, and receivables charts on a schedule | Instant notification per event |
| **When** | Daily, weekly, or a custom cadence | The moment the event fires in Xero |
| **AI summary** | Yes — trend analysis + financial context | No (single event notification) |
| **Best for** | Weekly finance reviews, trend tracking | Real-time ops alerts, new invoice notifications |
## Supported Events
| Event | Trigger |
| ----------------------- | -------------------------------------------------- |
| **New Invoice** | An invoice is created in Xero (any status) |
| **Invoice Updated** | An invoice is updated, approved, or marked as paid |
| **New Contact** | A new contact is created in Xero |
| **Contact Updated** | An existing contact is modified or archived |
| **New Credit Note** | A credit note is created |
| **Credit Note Updated** | A credit note is updated or applied to an invoice |
You can route any combination of these to any Slack channel. For example:
* `#finance` → New Invoice + Invoice Updated + New Credit Note
* `#ops` → New Contact + Contact Updated
* `#accounts` → all events
## What Gets Sent to Slack
Each Slack notification includes:
* **Event type and emoji** — e.g. `:receipt: New Invoice Created`
* **A direct link to the record** in Xero — click through to view the full invoice, contact, or credit note without leaving Slack
* **Timestamp** of when the event occurred in Xero
* **Footer** — `via Chartcastr Streams · Xero`
**Xero's webhook payloads are intentionally minimal.** Xero sends only the resource ID, event type, and timestamp — not the invoice amount, contact name, or other record details. The notification links directly to the record in Xero where you can see the full details. This is a Xero platform constraint, not a Chartcastr limitation.
### Example notifications
**New invoice created:**
```
📄 New Invoice Created
Invoice: View in Xero →
Time: 24 Feb 2026, 3:45 pm
via Chartcastr Streams · Xero
```
**Contact updated:**
```
✏️ Contact Updated
Contact: View in Xero →
Time: 24 Feb 2026, 9:12 am
via Chartcastr Streams · Xero
```
**Credit note created:**
```
💸 New Credit Note
Credit Note: View in Xero →
Time: 23 Feb 2026, 2:30 pm
via Chartcastr Streams · Xero
```
## Setup
Go to [Sources → Xero](/integrations/sources/xero) and complete the OAuth flow. Chartcastr requests read-only access to accounting reports and contacts — no write permissions.
Navigate to [Streams](https://chartcastr.com/admin/streams) in your dashboard. If Xero is connected and you have Slack set up, you'll see the Xero stream configuration UI alongside any other sources.
In the **By Channel** tab, click any Slack channel to choose which Xero events it receives. In the **By Source** tab, click any event type to see and edit which channels it routes to.
## Deduplication
Chartcastr deduplicates Xero webhook events using a key derived from the tenant ID, event sequence, and resource ID. If Xero retries a delivery (which it does on non-2xx responses), the duplicate event is silently dropped.
## Intent to Receive Validation
When you first enable Xero webhooks, Xero sends a validation request with an empty events array. Chartcastr handles this automatically — it verifies the HMAC signature and responds with `200 OK`. No action is required on your part.
## Streams as Context for Xero Pulses
When a notable Xero event arrives via a Stream (e.g. a large new invoice), Chartcastr stores it as context attached to that moment in time.
When your next [Xero Pulse](/integrations/sources/xero) delivers your weekly P\&L chart, the AI can surface that event in its analysis:
> *"Revenue this week included a significant invoice created on Wednesday — this aligns with the spike visible in the weekly chart."*
This is automatic — no manual notes required. The stream event is captured, timestamped, and made available to the AI when it runs your next Pulse.
For the best context capture, make sure you have [AI summaries](/analysis/in-pulses) enabled on your Xero Pulse connection. Without AI, stream context is stored but not surfaced in delivery.