Cabrechart Docs
Getting Started

Cabrechart Documentation

Cabrechart turns your Salesforce data into drag-and-drop dashboards, AI-powered analysis, and branded PDF or PowerPoint exports — live in 60 seconds, no code required.

Quick Start

Get a live Salesforce dashboard running in under 60 seconds.

  1. 1

    Connect your Salesforce org

    Click Sign In and authorize with your Salesforce credentials. Cabrechart uses OAuth 2.0 PKCE — no passwords stored. A 24-hour free trial begins immediately, no credit card required.
  2. 2

    Create a dashboard

    From the Dashboards page, click New Dashboard. Give it a name and click Create.
  3. 3

    Add a widget

    In the editor, click Add Widget. Search for a Salesforce report by name, pick a chart type, set a title, and click Add.
  4. 4

    Resize & arrange

    Drag widgets by their header to reorder. Drag the bottom-right handle to resize. The grid snaps automatically.
  5. 5

    Export or share

    Click Export in the toolbar to open Export Studio and download a branded PDF or PowerPoint. Or click Share to generate a live public link.

Sandbox testing

Use the Sign in to sandbox org link on the login page to connect a Salesforce sandbox instead of production.

Requirements

RequirementDetails
Salesforce editionEnterprise, Unlimited, Performance, or Developer. Must support Connected Apps and the Analytics REST API.
Cabrechart packageInstall Cabrechart from the Salesforce AppExchange. The managed package pre-configures all OAuth settings automatically — no manual Connected App setup required.
User permissionsAPI Enabled + View Reports in Public Folders + View Dashboards in Public Folders.
BrowserAny modern browser (Chrome, Firefox, Safari, Edge). No plugins or extensions required.
MFASalesforce MFA is fully supported and recommended. Cabrechart does not bypass it.

How Authentication Works

Cabrechart uses OAuth 2.0 Authorization Code flow with PKCE (Proof Key for Code Exchange) — the industry standard for secure browser-based app integrations with Salesforce.

1. Browser → GET /api/auth/login — generates PKCE code_verifier + state, stores challenge in DB

2. Redirect → Salesforce authorization page (user authenticates on SF directly)

3. Salesforce → GET /api/auth/callback?code=&state=

4. Server exchanges code + verifier for access + refresh tokens

5. Tokens encrypted with AES-256-GCM → stored in DB

6. Session JWT set as HttpOnly; Secure; SameSite=Lax cookie

Every subsequent request includes the session cookie. Middleware validates the session and injects the user ID as a request header before API routes run. All Salesforce calls use the user's own token — never a shared admin token.

AppExchange Installation

Coming to the Salesforce AppExchange

Cabrechart is being published as a managed package on the Salesforce AppExchange. Once available, admins install it directly from the marketplace in minutes — no manual Connected App configuration, no credential copying, no .env files to manage.

With the managed package, Cabrechart handles all OAuth infrastructure automatically. The Connected App, OAuth scopes, callback URLs, and PKCE configuration are bundled inside the package and deployed to your org at install time.

How installation will work

  1. 1

    Find Cabrechart on AppExchange

    Search for Cabrechart Analytics on the Salesforce AppExchange and click Get It Now. You can install into a sandbox first to validate before pushing to production.
  2. 2

    Choose installation scope

    Select Install for Admins Only to review first, then expand access via Permission Sets. The package installs the Connected App and all required metadata automatically.
  3. 3

    Assign the permission set

    The package includes a Cabrechart Analytics Access permission set. Assign it to any users who should be able to log in. It grants the minimum required access: API Enabled · View Reports in Public Folders · View Dashboards in Public Folders.
  4. 4

    Authorize in Cabrechart

    Navigate to cabrechart.com, click Sign In with Salesforce, and authorize the connection. Cabrechart uses OAuth 2.0 PKCE — no passwords are stored, and you authenticate directly on Salesforce's own login page.

Sandbox testing

Install into a Salesforce sandbox first. From the Cabrechart login page, use the Sign in to sandbox org link to connect your sandbox before rolling out to production users.

What the package configures automatically

SettingValue
Connected App nameCabrechart Analytics
OAuth flowAuthorization Code + PKCE
OAuth scopesapi · refresh_token · offline_access
Callback URLsManaged by Cabrechart — pre-configured for all environments
Refresh token policyExpire after 90 days of inactivity
Token revocationEnabled
Permission setCabrechart Analytics Access (included in package)

Least privilege

Cabrechart requests only read access to your Salesforce data. The package does not request Modify All Data, View All Data, or Manage Users permissions.

Environment Variables

Cabrechart is a fully managed SaaS platform — there are no environment variables for customers to configure. All Salesforce OAuth credentials, encryption keys, and infrastructure secrets are managed by Cabrechart on your behalf.

The table below is provided for reference only, relevant to Cabrechart's own infrastructure team:

VariablePurposeManaged by
SALESFORCE_CLIENT_IDOAuth Consumer Key from the managed package Connected AppCabrechart
SALESFORCE_CLIENT_SECRETOAuth Consumer SecretCabrechart
SALESFORCE_REDIRECT_URIOAuth callback URL registered in the Connected AppCabrechart
TOKEN_ENCRYPTION_KEYAES-256-GCM key for encrypting stored access tokensCabrechart
SESSION_SECRETHMAC key for signing session JWTsCabrechart
DATABASE_URLPostgreSQL connection stringCabrechart
ANTHROPIC_API_KEYPowers the AI Analyst featureCabrechart

Nothing to configure

As a Cabrechart customer, you do not manage any of these variables. Simply install the AppExchange package, assign the permission set to your users, and sign in — Cabrechart handles the rest.

Sessions & Tokens

PropertyValue
Session typeJWT stored in HttpOnly cookie
Cookie flagsHttpOnly · Secure · SameSite=Lax
Session TTL8 hours — then user must re-authenticate
Token encryptionAES-256-GCM · unique IV + salt per record
Token refreshAutomatic on access token expiry using stored refresh token
PKCE challenge TTL10 minutes · deleted from DB on consumption
LogoutDELETE /api/auth/logout — clears cookie + deletes session record

Creating Dashboards

Dashboards are the top-level container for your visualizations. Each dashboard has a name, optional description, and a set of widgets arranged on a 12-column grid.

ActionHow
CreateDashboards page → New Dashboard button. Enter name + optional description.
OpenClick any dashboard card. Opens the view mode with live data.
EditIn view mode, click Edit (pencil icon) in the toolbar. Opens the builder canvas.
DeleteHover a dashboard card → trash icon. Requires confirmation. Permanent.
ShareOpen dashboard → Share button → Generate link.
ExportOpen dashboard → Export button → opens Export Studio.

Adding Widgets

In dashboard edit mode, click Add Widget. The configuration panel opens on the right side of the screen.

Widget configuration fields

FieldRequiredDescription
TitleRequiredDisplay label shown in the widget header and exported documents.
SubtitleOptionalSecondary label for context (e.g., "Last 30 days").
TypeRequiredVisualization type — see Widget Reference below.
Data sourceRequiredReport ID (searched by name) or a raw SOQL query string.
Value columnConditionalWhich numeric column to use for the Y-axis / metric value.
Label columnConditionalWhich text column to use for X-axis labels or pie slices.
FiltersOptionalPre-baked filter conditions applied to the data source at query time.

Widget Reference

Cabrechart supports 11 widget types across three categories.

Chart widgets

TypeBest forKey config
barCategory comparisons, ranked listsorientation (h/v), stacked, grouped, colorBy
lineTime-series trends, multi-seriessmooth curves, area fill, multiple series
areaCumulative trends with fillstackedArea, gradient fill
piePart-to-whole proportionsmaxSlices, showLabels, showLegend
donutProportions with center KPISame as pie + centerValue, centerLabel
scatterCorrelation between two metricsxColumn, yColumn, sizeColumn (optional)
funnelPipeline conversion stagesshowConversionRate, orientation

KPI / indicator widgets

TypeBest forKey config
metricSingle big number, KPI cardprefix ($), suffix (%), comparison period, delta color
gaugeQuota attainment, target trackingmin, max, thresholds (green/amber/red zones), target line

Data & layout widgets

TypeBest forKey config
tableRow-level data displaypageSize, sortBy, sortDir, columnFormats, highlight rules
grouped-tableMulti-dimension grouped datagroupBy column, aggregation (sum/avg/count), expandable
rich-textHeaders, notes, instructionsHTML content, no data source needed
section-headerVisual section dividertitle, optional subtitle, no data source needed

Grid Layout

The dashboard canvas is a 12-column responsive grid powered by react-grid-layout. Each widget occupies a rectangular slot defined by { x, y, w, h } where x/w are column units and y/h are row units (1 row ≈ 60px).

  • Widgets snap to grid cells on drag and resize.
  • Rows expand downward automatically as widgets are added.
  • Minimum widget size is 2×2 columns×rows. There is no maximum.
  • On screens narrower than 768px, widgets reflow into a single-column vertical stack.
  • The save button persists the current layout to the database.

Filters & Date Ranges

Cabrechart supports two levels of filtering:

Widget-level date filters

Applied to a single widget's data source. Configured in the widget editor. Override the report's built-in date range for that widget only.

Dashboard-level global filters

Configured in the dashboard header bar. Applied to all compatible widgets simultaneously. Viewers can change the dashboard filter without editing the dashboard.

Available presets

TodayThis WeekThis MonthThis QuarterThis Fiscal QuarterThis Fiscal YearThis YearLast 7 DaysLast 30 DaysLast 90 DaysLast 12 MonthsCustom Range

Fiscal quarters

The This Fiscal Quarter and This Fiscal Year presets adapt to your Salesforce org's fiscal year start configuration. If your org has a non-calendar fiscal year, Cabrechart picks it up automatically from the Salesforce org metadata.

Salesforce Reports

The Reports browser (sidebar → Reports) shows all Salesforce reports accessible to the current user. Reports are fetched live from the Analytics REST API.

Running a report

Click Run to execute a report. Results appear inline below the report row in a sortable, searchable, paginated table (100 rows/page). Click CSV to download the full result set.

Inline filters

Click Filter to open the filter panel before running. Filter parameters are sent to the Salesforce Reports API at query time and do not modify the underlying report definition.

OperatorApplies to
equals / notEqualText, number, date, boolean
lessThan / greaterThanNumber, date
lessOrEqual / greaterOrEqualNumber, date
contains / notContainText
startsWithText

Adding a report to a dashboard

Click the + icon on any report row, choose a widget type and target dashboard. The widget is created with the report as its data source, pre-baked filters included.

SOQL Queries

Instead of a Salesforce report, widgets can use a raw SOQL query as their data source. This gives you full control over which fields, objects, and aggregations are returned.

SELECT only

Cabrechart enforces a strict allowlist: only SELECT statements are permitted. DML keywords (INSERT, UPDATE, DELETE, UPSERT) and DDL are blocked at the API layer.

Example queries

soql
-- Pipeline by stage
SELECT StageName, COUNT(Id) Deals, SUM(Amount) TotalValue
FROM Opportunity
WHERE IsClosed = false
  AND CloseDate = THIS_QUARTER
GROUP BY StageName
ORDER BY TotalValue DESC
soql
-- Top 10 accounts by ARR
SELECT Account.Name, SUM(Amount) ARR
FROM Opportunity
WHERE IsWon = true
  AND CloseDate = THIS_FISCAL_YEAR
GROUP BY Account.Name
ORDER BY ARR DESC
LIMIT 10
soql
-- Rep activity last 7 days
SELECT Owner.Name, COUNT(Id) Activities, ActivityDate
FROM Task
WHERE ActivityDate = LAST_N_DAYS:7
GROUP BY Owner.Name, ActivityDate
ORDER BY ActivityDate DESC

The query is executed using the jsforce client with the user's own OAuth token. Row-level security and field-level security are enforced by Salesforce before results are returned.

Importing Salesforce Dashboards

Sidebar → SF Dashboards lists all native Salesforce dashboards accessible to the current user. Each shows the dashboard name, description, folder path, and component count.

  • Click a dashboard to view its components and metadata.
  • Click Import to Cabrechart to auto-create a Cabrechart dashboard with the corresponding widgets. Salesforce dashboard component types are mapped to the closest Cabrechart widget type automatically.
  • Imported dashboards are fully editable — they are not kept in sync with the original Salesforce dashboard.

AI Analyst Overview

The AI Analyst is a conversational interface that gives you natural-language access to your Salesforce data. It uses a Salesforce-aware AI model with structured tool use — instead of generating hallucinated answers, it runs real queries and reasons over real data before responding.

Access it two ways:

  • Full-page mode — sidebar → AI Analyst. Open-ended research, multi-step analysis.
  • Dashboard panel mode — click AI icon inside any dashboard. The model has direct access to the widget data on that dashboard.

Pro & Team plans

AI Analyst requires a Pro or Team subscription. Usage is tracked in monthly credits. See Plans & Limits for allocations.

AI Analyst — Available Tools

The model has access to these read-only Salesforce tools. Tool activations are shown as animated pills in the chat UI while the model is working.

ToolWhat it does
list_salesforce_reportsBrowse the org's report library to find the most relevant report for a question.
describe_salesforce_reportInspect a report's metadata — columns, filters, groupings — before running it.
run_salesforce_reportExecute a report and retrieve results (up to 50 rows sent to the model).
run_soql_queryRun a SELECT SOQL query against any accessible object.
describe_salesforce_objectRead the field definitions and relationships for a Salesforce object to avoid hallucinated field names.
list_salesforce_objectsEnumerate available objects to find the right source for a question.
get_widget_dataFetch the current data from a specific dashboard widget (dashboard-context mode only).
suggest_visualizationRecommend a chart type and configuration for the data shape in the response.

AI Analyst — Credits & Limits

PlanMonthly AI creditsTop-up available
Starter
ProIncluded allocationYes — $5 top-up from chat interface
TeamHigher allocationYes — $5 top-up from chat interface

When credits are exhausted, the chat interface shows a Top up $5 now button that redirects to a Stripe checkout. Credits reset at the start of each billing month.

The model receives a maximum of 50 rows per tool call result. PII beyond what is strictly necessary for the analysis is stripped before data leaves the server.

Export Studio

Open Export Studio from any dashboard via the Export toolbar button. The Studio is a full-page interface with a configuration panel on the left and a live cover-page preview on the right.

Workflow

  1. 1

    Choose export type

    Toggle between PDF and PowerPoint at the top of the Studio.
  2. 2

    Set metadata

    Enter the report title, subtitle/date, and select a logo from your Logo Library (or enter a URL). These appear on the cover page.
  3. 3

    Choose a template

    Select a visual template. A mini preview updates as you pick.
  4. 4

    Exclude widgets (optional)

    Toggle off any widgets you don't want in the export. Section headers and rich text can also be excluded independently.
  5. 5

    Configure page options

    For PDF: choose page size (Letter / A4 / Legal) and orientation. For PPTX: choose slide size (16:9 / 4:3).
  6. 6

    Download

    Click Generate PDF or Generate PPTX. The file downloads immediately.

PDF Reference

OptionValuesDefault
Templatecorporate · modern · minimal · executive · data-densecorporate (overridden by Settings default)
Page sizeLETTER · A4 · LEGALLETTER
Orientationportrait · landscapeportrait
Cover pageAlways included with title, subtitle, logo, date, prepared-by label
Table of contentsAuto-generated from widget titlesIncluded
Widget layoutFull-page (1 per page) or 2-up (2 per page)Full-page
Intro notesOptional free-text section after coverEmpty
Widget exclusionsPer-widget toggle in StudioAll included
Footer textFrom branding settings or overridable per-exportFrom Settings

PDF template guide

TemplateStyle
CorporateStructured header, blue KPI cards, colored table headers, accent stripe
ModernClean white, bold typography, left accent sidebar on KPI cards
MinimalSparse layout, thin borders, light color palette — ideal for data-dense exports
ExecutiveDark background, gold accents, premium feel — best for board packs
Data DenseCompact spacing, maximizes information per page, smaller font

PowerPoint Reference

PPTX exports place each widget on its own slide. The first slide is always a branded title slide.

OptionValuesDefault
Templatecorporate · modern · dark · pitch · operationalcorporate (overridden by Settings default)
Slide sizewidescreen (16:9) · standard (4:3)widescreen
Custom templateUpload a .pptx in Settings → PPTX Library to extract brand theme
Slide titlesWidget title. Editable per-slide in Studio.Widget title
Widget exclusionsPer-widget toggle in StudioAll included

PPTX template guide

TemplateStyle
CorporateDark navy title slide, branded footer bar on each slide
ModernColor band title slide, white content slides, top accent stripe
DarkFull dark theme throughout — optimized for projector / screen presentations
PitchBold, high-contrast, blue gradient — investor / startup decks
OperationalCompact, data-rich, light background — daily ops & field reports

Branding & Templates

Set company identity once in Settings. It is automatically applied to every PDF, PPTX, and share-link dashboard.

FieldUsed in
Company NamePDF cover page, PPTX title slide, share link header
TaglinePDF cover page sub-line, PPTX title slide
Logo URLPDF header (every page), PPTX slides, share link header
Primary ColorPDF headers, KPI card accents, table column headers
Secondary ColorSub-headers, contrast elements
Accent ColorTrend delta badges, highlight elements
Footer TextPDF page footer (every page)
"Prepared by" LabelPDF cover attribution line
Default PDF TemplatePre-selected in Export Studio (overridable per export)
Default PPTX TemplatePre-selected in Export Studio (overridable per export)

Logo Library

Upload up to 10 logos (PNG · JPG · SVG · max 300 KB each). When exporting, choose which logo to use from a dropdown. Logos are stored securely and referenced by ID in export requests.

PPTX Template Library

Upload up to 5 branded .pptx files (max 10 MB). Cabrechart extracts theme colors and fonts via the Office Open XML spec. The original file is discarded; only color/font metadata is stored. Mark a template as Active to apply it automatically to all PPTX exports. When a custom template is active, its colors and fonts override the built-in template palette.

Scheduled Reports

Scheduled reports automatically generate a branded PDF and email it to any list of recipients on a recurring schedule. Recipients do not need a Cabrechart account.

Schedule configuration

FieldRequiredDescription
NameRequiredInternal name for the schedule (e.g., "Weekly Sales Summary").
DashboardRequiredWhich dashboard's live data to export.
FrequencyRequireddaily · weekly · monthly. Use a preset or configure custom.
Hour / MinuteRequiredTime of day to run. Minute options: :00 or :30.
TimezoneRequiredAny IANA timezone (e.g., America/New_York). Defaults to ET.
RecipientsRequiredComma or newline-separated list of email addresses.
SubjectOptionalEmail subject line. Defaults to "[Dashboard name] — [date]".
MessageOptionalPersonal note included in the email body above the PDF attachment.

Plan limits

PlanMax active schedules
Starter1
Pro5
Team20

Schedule states

  • Active — will run at next scheduled time.
  • Paused — skips all future runs until manually resumed. Configuration is preserved.
  • Error — last run failed. The error message is shown on the schedule card. The schedule retries on the next interval.

Share links generate a public, read-only URL for a dashboard. Recipients see live Salesforce data with no login required.

  • Generated from the dashboard toolbar → Share → Generate link.
  • Each link is a cryptographically random token stored in the database.
  • Optional expiry date — link returns 410 Gone after expiry.
  • Revoke at any time by deleting the share record.
  • Share link pages apply the same branding (logo, colors) as the regular dashboard view.
  • Widget data is fetched on-demand using a scoped service token — not the user's personal OAuth token.

Treat share links like sensitive documents

Anyone with the URL can view live Salesforce data from that dashboard. Use expiry dates for temporary access and revoke links when they are no longer needed.

Plan Comparison

FeatureStarter — $20/moPro — $50/moTeam — $200/mo
Dashboards3UnlimitedUnlimited
Widgets per dashboardUnlimitedUnlimitedUnlimited
PDF export
PowerPoint export
AI Analyst
Custom branding
Scheduled reports1Up to 5Up to 20
Share linksLimitedIncludedUnlimited
Data refresh interval30 min5 min1 min
Salesforce report browser
SF dashboard import
SupportStandardPriorityDedicated

All plans include the 24-hour free trial. Billed monthly. Cancel anytime — access continues through the end of the billing period. Payments processed by Stripe (PCI-compliant).

Rate Limits & Quotas

LimitValueNotes
API requests (data endpoints)100 req/min per userEnforced via Redis token bucket
Auth endpoints10 req/min per userLogin, callback, logout
Salesforce API rows per widget2,000 rowsSalesforce org API governor limits also apply
AI query rows sent to model50 rows per tool callData minimization policy
SOQL query timeout30 secondsReturns timeout error; retry with more specific query
Report async timeout30 seconds client / 20 min SFLarge reports use SF async polling
PDF export sizeNo hard limitLarge dashboards may take 10–30s to generate
Logo upload size300 KB per imagePNG · JPG · SVG
PPTX template upload10 MB.pptx files only
Share links per dashboardUnlimited (Team) · Limited (Starter/Pro)
PKCE challenge TTL10 minutesAutomatically cleaned up

Salesforce governor limits

Salesforce imposes its own API call and row limits that vary by edition and license. Cabrechart surfaces Salesforce governor limit errors transparently in the UI. Use caching (Pro/Team: Redis-backed 5-min TTL) and narrow SOQL queries to stay within limits.

Security Model

Authentication & authorization

ControlImplementation
OAuth flowAuthorization Code + PKCE (S256). No implicit flow.
SessionJWT in HttpOnly + Secure + SameSite=Lax cookie. 8h TTL.
Token storageAES-256-GCM encrypted with unique IV + salt per record.
Token rotationAccess token auto-refreshed on expiry using stored refresh token.
PKCE challengesStored server-side, one-time use, 10-min TTL, deleted on consumption.
MiddlewareEvery request validated in edge middleware before reaching API routes.
SF permissionsUser's own OAuth token used for all Salesforce calls — sharing rules enforced by SF.
Admin permissionsSeparate admin middleware. Admin flag stored on user record.

Infrastructure

ControlImplementation
TransportHTTPS enforced everywhere. HSTS with preload.
Security headersCSP, X-Frame-Options: DENY, X-Content-Type-Options: nosniff
DatabaseSSL required connection. Private network. No public endpoint.
SecretsEnvironment variables / secret manager. Never in source code.
Dependency scanningnpm audit in CI. Dependabot / Snyk recommended.
Audit loggingEvery data access, export, AI query, login, and logout logged with IP, user agent, user ID, resource, and timestamp.
Audit retentionMinimum 1 year.

SOQL injection prevention

The SOQL execution layer enforces an allowlist at the API layer before sending any query to Salesforce:

typescript
// Blocked at /api/salesforce/query
const FORBIDDEN = /\b(INSERT|UPDATE|DELETE|UPSERT|MERGE|CREATE|ALTER|DROP|EXEC|EXECUTE)\b/i
if (FORBIDDEN.test(query)) {
  return 400 // Bad Request
}
if (!query.trim().toUpperCase().startsWith('SELECT')) {
  return 400
}

Data & Privacy

What Cabrechart stores

DataStored?Notes
Salesforce CRM dataNeverFetched live on demand, never written to Cabrechart DB.
Dashboard configurationYesWidget types, titles, layout, data source references (report IDs / SOQL strings).
User account recordYesSalesforce user ID, display name, email (from Salesforce identity endpoint).
OAuth tokensYes (encrypted)AES-256-GCM encrypted at rest. Never logged or exposed via API.
Branding / logosYesCompany name, colors, uploaded logo images.
Audit logsYesIP, user agent, user ID, resource, action, timestamp. Retained 1 year minimum.
Schedule configurationYesSchedule metadata, recipient email addresses.
PKCE challengesEphemeralDeleted on use or after 10 min expiry.

AI data handling

  • Maximum 50 rows of Salesforce data sent per AI tool call.
  • PII beyond what is strictly necessary for the analysis is excluded before data leaves the server.
  • The AI model has no write access to Salesforce — all tool calls are read-only.
  • AI conversations are not persisted to the database.

Questions or security issues?

Email admin@cabrechart.com or reach us on X at @cabrechart. We respond to all security reports within one business day.