Statsig Python API Docs | dltHub
Build a Statsig-to-database pipeline in Python using dlt with AI Workbench support for Claude Code, Cursor, and Codex.
Last updated:
Statsig is a platform for feature gates, dynamic configs, and experimentation to control feature rollouts and measure experiments. The REST API base URL is https://statsigapi.net and All requests require a Console API key header (STATSIG-API-KEY) or statsig-api-key header for HTTP API usage..
dlt is an open-source Python library that handles authentication, pagination, and schema evolution automatically. dlthub provides AI context files that enable code assistants to generate production-ready pipelines. Install with uv pip install "dlt[workspace]" and start loading Statsig data in under 10 minutes.
What data can I load from Statsig?
Here are some of the endpoints you can load from Statsig:
| Resource | Endpoint | Method | Data selector | Description |
|---|---|---|---|---|
| projects | /projects | GET | projects | List projects in the organization (Console API) |
| feature_gates | /projects/{project_name}/feature_gates | GET | feature_gates | List feature gates for a project |
| dynamic_configs | /projects/{project_name}/dynamic_configs | GET | dynamic_configs | List dynamic configs for a project |
| experiments | /projects/{project_name}/experiments | GET | experiments | List experiments for a project |
| segments | /projects/{project_name}/segments | GET | segments | List segments/audiences for a project |
| get_feature_gate | /feature_gates/{name} | GET | feature_gate | Get single feature gate details |
| get_dynamic_config | /dynamic_configs/{name} | GET | dynamic_config | Get single dynamic config details |
How do I authenticate with the Statsig API?
The Console API requires a Console API Key sent in the request header named STATSIG-API-KEY. The HTTP API accepts the statsig-api-key header (server-side secret or client SDK key as appropriate). Some Console API requests also accept an optional STATSIG-API-VERSION header (e.g., 20240601).
1. Get your credentials
- Sign in to the Statsig Console (https://console.statsig.com). 2) Open Project Settings -> Keys & Environments or API Keys. 3) Create a Console API Key (for Console API) or copy your Server-side secret / Client‑SDK Key (for HTTP API). 4) Store the key securely; never embed server secret keys in client apps.
2. Add them to .dlt/secrets.toml
[sources.statsig_source] console_api_key = "your_console_api_key_here"
dlt reads this automatically at runtime — never hardcode tokens in your pipeline script. For production environments, see setting up credentials with dlt for environment variable and vault-based options.
How do I set up and run the pipeline?
Set up a virtual environment and install dlt:
uv venv && source .venv/bin/activate uv pip install "dlt[workspace]"
1. Install the dlt AI Workbench:
dlt ai init --agent <your-agent> # <agent>: claude | cursor | codex
This installs project rules, a secrets management skill, appropriate ignore files, and configures the dlt MCP server for your agent. Learn more →
2. Install the rest-api-pipeline toolkit:
dlt ai toolkit rest-api-pipeline install
This loads the skills and context about dlt the agent uses to build the pipeline iteratively, efficiently, and safely. The agent uses MCP tools to inspect credentials — it never needs to read your secrets.toml directly. Learn more →
3. Start LLM-assisted coding:
Use /find-source to load data from the Statsig API into DuckDB.
The rest-api-pipeline toolkit takes over from here — it reads relevant API documentation, presents you with options for which endpoints to load, and follows a structured workflow to scaffold, debug, and validate the pipeline step by step.
4. Run the pipeline:
python statsig_pipeline.py
If everything is configured correctly, you'll see output like this:
Pipeline statsig_pipeline load step completed in 0.26 seconds 1 load package(s) were loaded to destination duckdb and into dataset statsig_data The duckdb destination used duckdb:/statsig.duckdb location to store data Load package 1749667187.541553 is LOADED and contains no failed jobs
Inspect your pipeline and data:
dlt pipeline statsig_pipeline show
This opens the Pipeline Dashboard where you can verify pipeline state, load metrics, schema (tables, columns, types), and query the loaded data directly.
Python pipeline example
This example loads feature_gates and projects from the Statsig API into DuckDB. It mirrors the endpoint and data selector configuration from the table above:
import dlt from dlt.sources.rest_api import RESTAPIConfig, rest_api_resources @dlt.source def statsig_source(console_api_key=dlt.secrets.value): config: RESTAPIConfig = { "client": { "base_url": "https://statsigapi.net", "auth": { "type": "api_key", "console_api_key": console_api_key, }, }, "resources": [ {"name": "feature_gates", "endpoint": {"path": "projects/{project_name}/feature_gates", "data_selector": "feature_gates"}}, {"name": "projects", "endpoint": {"path": "projects", "data_selector": "projects"}} ], } yield from rest_api_resources(config) def get_data() -> None: pipeline = dlt.pipeline( pipeline_name="statsig_pipeline", destination="duckdb", dataset_name="statsig_data", ) load_info = pipeline.run(statsig_source()) print(load_info)
To add more endpoints, append entries from the resource table to the "resources" list using the same name, path, and data_selector pattern.
How do I query the loaded data?
Once the pipeline runs, dlt creates one table per resource. You can query with Python or SQL.
Python (pandas DataFrame):
import dlt data = dlt.pipeline("statsig_pipeline").dataset() sessions_df = data.feature_gates.df() print(sessions_df.head())
SQL (DuckDB example):
SELECT * FROM statsig_data.feature_gates LIMIT 10;
In a marimo or Jupyter notebook:
import dlt data = dlt.pipeline("statsig_pipeline").dataset() data.feature_gates.df().head()
See how to explore your data in marimo Notebooks and how to query your data in Python with dataset.
What destinations can I load Statsig data to?
dlt supports loading into any of these destinations — only the destination parameter changes:
| Destination | Example value |
|---|---|
| DuckDB (local, default) | "duckdb" |
| PostgreSQL | "postgres" |
| BigQuery | "bigquery" |
| Snowflake | "snowflake" |
| Redshift | "redshift" |
| Databricks | "databricks" |
| Filesystem (S3, GCS, Azure) | "filesystem" |
Change the destination in dlt.pipeline(destination="snowflake") and add credentials in .dlt/secrets.toml. See the full destinations list.
Troubleshooting
Authentication failures
Ensure the STATSIG-API-KEY (Console API) or statsig-api-key (HTTP API) header is present and the key is a Console API Key or server secret respectively. Server-side secret keys must not be used client-side.
Rate limits
Console API mutation requests are limited (~100 requests/10s and ~900 requests/15min per project). Default Console API rate limits noted as 10 requests/second and 4500 requests/15 minutes in some integrations—back off and retry with exponential backoff on 429 responses.
Pagination and request methods
The HTTP API commonly uses POST for fetching some SDK-style evaluation payloads; however the Console API exposes standard GET endpoints for CRUD. Check response bodies for list keys (e.g., projects, feature_gates, experiments) and use those as the data selector.
Ensure that the API key is valid to avoid 401 Unauthorized errors. Also, verify endpoint paths and parameters to avoid 404 Not Found errors.
Next steps
Continue your data engineering journey with the other toolkits of the dltHub AI Workbench:
data-exploration— Build custom notebooks, charts, and dashboards for deeper analysis with marimo notebooks.dlthub-runtime— Deploy, schedule, and monitor your pipeline in production.
dlt ai toolkit data-exploration install dlt ai toolkit dlthub-runtime install
Was this page helpful?
Community Hub
Need more dlt context for Statsig?
Request dlt skills, commands, AGENT.md files, and AI-native context.