Free SKILL.md scraped from GitHub. Clone the repo or copy the file directly into your Claude Code skills directory.
npx versuz@latest install jeremylongshore-claude-code-plugins-plus-skills-plugins-saas-packs-clari-pack-skills-clari-deploy-integrationgit clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills.gitcp claude-code-plugins-plus-skills/SKILL.MD ~/.claude/skills/jeremylongshore-claude-code-plugins-plus-skills-plugins-saas-packs-clari-pack-skills-clari-deploy-integration/SKILL.md---
name: clari-deploy-integration
description: 'Deploy Clari export pipelines to production with Airflow, Cloud Functions,
or Lambda.
Use when scheduling automated exports, deploying to cloud platforms,
or setting up serverless Clari sync.
Trigger with phrases like "deploy clari", "clari airflow",
"clari lambda", "clari cloud function", "clari scheduled export".
'
allowed-tools: Read, Write, Edit, Bash(gcloud:*), Bash(aws:*)
version: 1.0.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- revenue-intelligence
- forecasting
- clari
compatibility: Designed for Claude Code
---
# Clari Deploy Integration
## Overview
Deploy Clari export pipelines to production environments: Airflow DAGs, AWS Lambda, or Google Cloud Functions for scheduled, serverless execution.
## Instructions
### Airflow DAG
```python
# dags/clari_export_dag.py
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.models import Variable
from datetime import datetime, timedelta
def export_clari_forecast(**context):
from clari_client import ClariClient, ClariConfig
client = ClariClient(ClariConfig(
api_key=Variable.get("clari_api_key"),
))
period = context["params"].get("period", "2026_Q1")
data = client.export_and_download("company_forecast", period)
entries = data.get("entries", [])
context["ti"].xcom_push(key="entry_count", value=len(entries))
# Load to warehouse here
dag = DAG(
"clari_daily_export",
schedule_interval="0 6 * * *",
start_date=datetime(2026, 1, 1),
catchup=False,
default_args={"retries": 2, "retry_delay": timedelta(minutes=5)},
)
export_task = PythonOperator(
task_id="export_forecast",
python_callable=export_clari_forecast,
dag=dag,
)
```
### AWS Lambda
```python
# lambda_handler.py
import json
import boto3
from clari_client import ClariClient, ClariConfig
def handler(event, context):
ssm = boto3.client("ssm")
api_key = ssm.get_parameter(
Name="/clari/api-key", WithDecryption=True
)["Parameter"]["Value"]
client = ClariClient(ClariConfig(api_key=api_key))
data = client.export_and_download(
event.get("forecast_name", "company_forecast"),
event.get("period", "2026_Q1"),
)
return {
"statusCode": 200,
"body": json.dumps({"entries": len(data.get("entries", []))}),
}
```
### Google Cloud Function
```python
# main.py
import functions_framework
from google.cloud import secretmanager
from clari_client import ClariClient, ClariConfig
@functions_framework.http
def clari_export(request):
sm = secretmanager.SecretManagerServiceClient()
secret = sm.access_secret_version(name="projects/my-proj/secrets/clari-api-key/versions/latest")
api_key = secret.payload.data.decode()
client = ClariClient(ClariConfig(api_key=api_key))
data = client.export_and_download("company_forecast", "2026_Q1")
return {"entries": len(data.get("entries", []))}
```
## Error Handling
| Issue | Cause | Solution |
|-------|-------|----------|
| Lambda timeout | Export takes > 15min | Use Step Functions for long jobs |
| Secret not found | Wrong parameter path | Verify SSM/Secret Manager path |
| Airflow task fails | Rate limited | Add retries with backoff |
## Resources
- [Airflow Documentation](https://airflow.apache.org/docs/)
- [AWS Lambda](https://docs.aws.amazon.com/lambda/)
## Next Steps
For webhook setup, see `clari-webhooks-events`.