Skip to main content
AI/MLjeremylongshore

clari-reference-architecture

'Reference architecture for Clari revenue intelligence integrations.

Stars
2,267
Source
jeremylongshore/claude-code-plugins-plus-skills
Updated
2026-05-31
Slug
jeremylongshore--claude-code-plugins-plus-skills--clari-reference-architecture
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/jeremylongshore/claude-code-plugins-plus-skills/HEAD/plugins/saas-packs/clari-pack/skills/clari-reference-architecture/SKILL.md -o .claude/skills/clari-reference-architecture.md

Drops the SKILL.md into .claude/skills/clari-reference-architecture.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

Clari Reference Architecture

Overview

Production architecture for Clari revenue intelligence integrations: export pipeline design, data warehouse schema, analytics layer, and alerting.

Prerequisites

  • Approved Clari export scope and a named revenue-data owner
  • Separate development, staging, and production storage/state boundaries
  • Warehouse access controls, retention policy, and audit logging
  • An orchestrator capable of idempotent exports and reviewed recovery

Instructions

Build the pipeline in a non-production boundary first: pin the client and schema version, export a designated period, validate the manifest, and load through an idempotent warehouse operation. Promote the same reviewed design only after access controls, freshness alerts, and recovery behavior pass; keep individual forecast and owner data out of shared dashboards by default.

Architecture Diagram

┌──────────────┐     ┌─────────────────┐     ┌──────────────────┐
│  Clari App   │     │  Clari Export    │     │  Data Warehouse  │
│  (SaaS)      │────▶│  API (v4)       │────▶│  (Snowflake/BQ)  │
└──────────────┘     └─────────────────┘     └────────┬─────────┘
                                                       │
                     ┌─────────────────┐     ┌────────▼─────────┐
                     │  Change         │     │  Analytics /     │
                     │  Detection      │────▶│  Dashboard       │
                     └─────────────────┘     │  (Looker/Metabase)│
                            │                └──────────────────┘
                     ┌──────▼──────────┐
                     │  Alerts         │
                     │  (Slack/Email)  │
                     └─────────────────┘

Project Structure

clari-data-platform/
├── src/
│   ├── clari_client.py         # API client wrapper
│   ├── export_pipeline.py      # ETL pipeline
│   ├── change_detector.py      # Forecast change tracking
│   ├── models.py               # Data models
│   └── config.py               # Environment config
├── dags/
│   └── clari_export_dag.py     # Airflow DAG
├── sql/
│   ├── schema.sql              # Warehouse table definitions
│   ├── merge.sql               # Upsert logic
│   └── analytics/
│       ├── forecast_accuracy.sql
│       ├── pipeline_coverage.sql
│       └── rep_performance.sql
├── tests/
│   ├── fixtures/               # Sample API responses
│   ├── test_pipeline.py
│   └── test_change_detector.py
├── scripts/
│   ├── run_export.sh
│   └── validate_schema.py
└── monitoring/
    ├── alerts.yaml             # Alert rules
    └── dashboard.json          # Grafana/Looker config

Data Warehouse Schema

-- Core tables
CREATE TABLE clari_forecasts (
    id BIGINT GENERATED ALWAYS AS IDENTITY,
    owner_name VARCHAR NOT NULL,
    owner_email VARCHAR NOT NULL,
    forecast_amount DECIMAL(15,2),
    quota_amount DECIMAL(15,2),
    crm_total DECIMAL(15,2),
    crm_closed DECIMAL(15,2),
    adjustment_amount DECIMAL(15,2),
    time_period VARCHAR NOT NULL,
    forecast_name VARCHAR NOT NULL,
    exported_at TIMESTAMP NOT NULL,
    PRIMARY KEY (owner_email, time_period, forecast_name, exported_at)
);

-- Change tracking
CREATE TABLE clari_forecast_changes (
    id BIGINT GENERATED ALWAYS AS IDENTITY,
    owner_email VARCHAR NOT NULL,
    time_period VARCHAR NOT NULL,
    previous_amount DECIMAL(15,2),
    current_amount DECIMAL(15,2),
    change_pct DECIMAL(5,2),
    detected_at TIMESTAMP NOT NULL
);

-- Analytics views
CREATE VIEW v_forecast_accuracy AS
SELECT
    time_period,
    owner_name,
    forecast_amount,
    crm_closed AS actual_closed,
    ROUND((1 - ABS(forecast_amount - crm_closed) / NULLIF(forecast_amount, 0)) * 100, 1) AS accuracy_pct
FROM clari_forecasts
WHERE exported_at = (SELECT MAX(exported_at) FROM clari_forecasts f2 WHERE f2.time_period = clari_forecasts.time_period);

Key Design Decisions

Decision Choice Rationale
Export frequency Daily Balances freshness vs API load
Data format JSON export Structured, easy to parse
Pipeline orchestration Airflow Retry, monitoring, DAG visualization
Change detection Snapshot comparison Clari has no real-time webhooks
Warehouse Snowflake SQL analytics, dbt compatibility

Error Handling

Condition Response
Export is partial or stale Mark the dataset uncertified and halt downstream publication.
Warehouse load breaks a constraint Retain the staged input, diagnose the schema mismatch, and avoid destructive replacement.
Data crosses environment or role boundaries Restrict access, investigate the policy failure, and rotate affected credentials if needed.
Freshness alert fires Notify the data owner with the last certified period and job correlation data.

Output

Produce an architecture decision and pipeline manifest covering environment boundaries, owners, schema/client pins, data classification, retention, monitoring, recovery, and the latest certified export. Design diagrams are guidance only; the reviewed implementation and observed run evidence are the source of operational truth.

Examples

Deploy the daily export into staging with a separate warehouse role, verify that a repeated run does not duplicate rows, and test a delayed-export alert. Promote only the approved equivalent configuration to production; if a report contains unauthorized rep-level detail, restrict it and correct the access model before publishing another refresh.

Resources

Next Steps

This completes the Clari skill pack. Start with clari-install-auth for new integrations.