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:

ResourceEndpointMethodData selectorDescription
projects/projectsGETprojectsList projects in the organization (Console API)
feature_gates/projects/{project_name}/feature_gatesGETfeature_gatesList feature gates for a project
dynamic_configs/projects/{project_name}/dynamic_configsGETdynamic_configsList dynamic configs for a project
experiments/projects/{project_name}/experimentsGETexperimentsList experiments for a project
segments/projects/{project_name}/segmentsGETsegmentsList segments/audiences for a project
get_feature_gate/feature_gates/{name}GETfeature_gateGet single feature gate details
get_dynamic_config/dynamic_configs/{name}GETdynamic_configGet 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

  1. 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:

DestinationExample 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.