# SaaS Data Connector

Loads SaaS data into DuckDB with dlt and builds a Wren semantic project for SQL.

- Repository: https://github.com/Canner/WrenAI (18031 stars)
- Category: Data and ML
- License: Apache-2.0
- Last updated: 2026-10-30
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add Canner/WrenAI --skill dlt-connector -g -a claude-code -y`
Codex: `npx skills add Canner/WrenAI --skill dlt-connector -g -a codex -y`
Cursor: `npx skills add Canner/WrenAI --skill dlt-connector -g -a cursor -y`
Gemini CLI: `npx skills add Canner/WrenAI --skill dlt-connector -g -a gemini-cli -y`

## Description

Connect SaaS data (HubSpot, Stripe, Salesforce, GitHub, Slack, etc.) to Wren Engine for SQL analysis. Guides the user through the full flow: install dlt, pick a SaaS source, set up credentials, run the data pipeline into DuckDB, then auto-generate a Wren semantic project from the loaded data. Use this skill whenever the user mentions: connecting SaaS data, importing data from an API, dlt pipelines, loading HubSpot/Stripe/Salesforce/GitHub/Slack data, querying SaaS data with SQL, or setting up a new data source from a REST API. Also trigger when the user already has a dlt-produced DuckDB file and wants to create a Wren project from it.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# wren-dlt-connector

> Reference docs (`dlt_sources`) and the `introspect_dlt` script are bundled. Pull references with `wren skills get dlt-connector --full`; fetch a script with `wren skills get dlt-connector --script <name>`.

Connect SaaS data to Wren Engine for SQL analysis, from zero to a verified, queryable project in one conversation.

## Who this is for

Data analysts who know SQL and some Python, but may not have used dlt or Wren before. Explain concepts briefly when they first appear, but don't over-explain things a SQL-literate person would already know.

## Overview

This skill walks through a four-phase workflow:

1. **Extract**, Use dlt (data load tool) to pull data from a SaaS API into a local DuckDB file
2. **Model**, Introspect the DuckDB schema and auto-generate a Wren semantic project (YAML models, relationships, profile)
3. **Build & Verify**, Build the project and run actual SQL queries to confirm everything works end-to-end
4. **Handoff**, Show the user their data and next steps

The user might enter at any phase. Ask which phase they're starting from, they may already have a `.duckdb` file and just need phases 2, 4.

**The goal is a project that actually queries successfully, not just files that look correct.** Always run the verification step before declaring success.

## Critical: DuckDB catalog naming

When wren engine connects to a DuckDB file, it ATTACHes it using the filename (without `.duckdb` extension) as the catalog alias:

```
ATTACH DATABASE 'stripe_data.duckdb' AS "stripe_data" (READ_ONLY)
```

This means **every model's `table_reference.catalog` must equal the DuckDB filename stem**. If the file is `hubspot.duckdb`, the catalog is `hubspot`. If it's `my_pipeline.duckdb`, the catalog is `my_pipeline`.

Getting this wrong causes "table not found" errors at query time. The `introspect_dlt.py` script handles this automatically.

## Critical: Type normalization

The rest: https://github.com/Canner/WrenAI/blob/HEAD/core/wren/src/wren/skills_content/dlt-connector/SKILL.md
