
Documenting Data Warehouse Sources
FreeStreamline documentation for PostHog data sources.
Free · Opens the source repo
What Documenting Data Warehouse Sources does
The Documenting Data Warehouse Sources skill is designed to facilitate the creation and maintenance of user-facing documentation for data warehouse import sources in PostHog. This skill is particularly useful for developers and technical writers who are involved in adding new sources or updating existing documentation to ensure consistency and clarity. By following a defined template and utilizing shared snippets, users can efficiently produce documentation that adheres to the standards set by PostHog.
When using this skill, you will work with specific components such as <SourceParameters /> and <SourceTables />, which automatically render connection fields and supported tables based on the API data. This means you do not need to manually input these details, reducing the potential for errors and saving time. The skill also emphasizes the importance of maintaining a single source of truth by ensuring that any changes to the documentation reflect the underlying source code rather than duplicating efforts.
The skill includes a canonical template that outlines essential sections every source documentation must contain, such as prerequisites, configuration, and troubleshooting. This structured approach not only helps in maintaining uniformity across documents but also aids users in quickly finding the information they need. Additionally, the skill provides guidelines for creating slugs and filenames that prevent 404 errors, ensuring that users can access the documentation easily.
Overall, this skill is ideal for teams working with PostHog who need to ensure their data source documentation is accurate, up-to-date, and user-friendly. It streamlines the documentation process, allowing teams to focus more on development and less on administrative tasks.
When to use it
Use this skill when adding new data sources or updating existing documentation in PostHog to maintain a standardized format.
When not to use it
This skill is not suitable for creating documentation outside of the PostHog data warehouse context or for sources that do not follow the defined structure.
What you can build with it
Adding a New Data Source
When introducing a new data source to PostHog, use this skill to create the corresponding documentation efficiently.
Updating Existing Documentation
If you need to fix inconsistencies in existing source docs, this skill provides a structured approach to ensure uniformity.
Maintaining Documentation Standards
Use this skill to ensure that all data source documentation adheres to the standards set by PostHog, reducing errors and improving clarity.
How to install Documenting Data Warehouse Sources
View source1. Install with the skills CLI
npx skills add posthog/posthog/documenting-warehouse-sources --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by posthogDocumenting Data warehouse sources
User-facing source docs live in the posthog.com repo (not this one) at
contents/docs/cdp/sources/<slug>.md, served at both /docs/cdp/sources/<slug> and
/docs/data-warehouse/sources/<slug>. This skill defines the one consistent shape every source doc
must follow. Pair it with /implementing-warehouse-sources when shipping a new source.
Assume a sibling posthog.com checkout (e.g. ../posthog.com).
The two things the website renders for you
You do not hand-write connection fields or the table list — both come from the
public_source_configs API the site fetches at build time, mirrored into the doc via MDX components:
<SourceParameters />renders the connection/config form fields fromget_source_config.fields.<SourceTables />renders the Supported tables reference (table name, description, sync method, incremental field, primary key) from the source'sget_documented_tables().
<SourceTables /> only has data when the source opts in by setting
lists_tables_without_credentials = True on its source class (only valid when get_schemas iterates a
static endpoint catalog with no I/O — see /implementing-warehouse-sources). Otherwise it renders a
generic "discovered from your account" note. If a table is missing or its description is thin, fix the
source code (settings.py endpoints + canonical_descriptions.py), not the doc — the doc just renders
what the API returns, so the code stays the single source of truth.
Frontmatter
---
title: Linking <Source> as a source
sidebar: Docs
showTitle: true
availability: { free: full, selfServe: full, enterprise: full }
sourceId: <EnumValue> # MUST equal the ExternalDataSourceType value, e.g. ActiveCampaign, Stripe
beta: true # optional — only for beta sources
---
sourceId is what links the doc to its API config (icon, fields, tables). Get it wrong and the doc
renders with no <SourceParameters /> / <SourceTables /> data. It must be a real
ExternalDataSourceType value (PascalCase, e.g. ActiveCampaign, not Active Campaign).
Canonical template
---
title: Linking <Source> as a source
sidebar: Docs
showTitle: true
availability: { free: full, selfServe: full, enterprise: full }
sourceId: <EnumValue>
---
import SourceSetupIntro from "../_snippets/source-setup-intro.mdx"
import SyncModes from "../_snippets/sync-modes.mdx"
import TroubleshootingLink from "../_snippets/dw-troubleshooting-link.mdx"
<!-- Alpha/beta only: import AlphaRelease from "../_snippets/alpha-release.mdx" and render <AlphaRelease /> here -->
One or two sentences: what this connector syncs and the typical use case.
## Prerequisites
Account tier / admin rights / API access the user needs before they can connect.
## Adding a data source
<SourceSetupIntro />
List the specific credentials this source needs and exactly where to get them (link to the provider's
dashboard). For sources with more than one auth method, use `###` subsections (mirror Stripe's
"Option 1 / Option 2").
## Sync modes
<SyncModes />
Add any source-specific recommendation here (e.g. "use webhooks for Stripe").
## Configuration
<SourceParameters />
## Supported tables
<SourceTables />
## Troubleshooting
Source-specific errors and fixes (optional but encouraged), then:
<TroubleshootingLink />
Essential sections (every source)
Status callout (alpha/beta only) → intro → Prerequisites → Adding a data source → Sync modes → Configuration → Supported tables → Troubleshooting.
Optional sections (when applicable)
Webhooks (real-time sync), CDC (databases), Column selection, Row filters, Inbound IP addresses
(<InboundIpAddresses />), data-type handling, known limitations, ERD/relationships. Reference
implementations already in the repo: Stripe (SaaS + webhooks), Postgres (database + CDC),
ClickHouse (database). Don't invent sections the source doesn't need.
Shared snippets
Reuse these instead of re-writing the same prose (they live in contents/docs/cdp/_snippets/):
source-setup-intro.mdx— the standard "Adding a data source" steps.sync-modes.mdx— sync-mode summary linking to the canonical explanation.alpha-release.mdx/beta-release.mdx— status callouts (also setbeta: truein frontmatter).dw-troubleshooting-link.mdx— the troubleshooting/support footer.inbound-ip-addresses.mdx— IP allowlist table for DB sources.feedback-questions.mdx— feedback/FAQ footer.
.md source docs support MDX import (e.g. convex.md, mongodb.md), so you don't need to rename to
.mdx to use snippets — but .mdx is fine too. CalloutBox, ProductScreenshot, SourceParameters,
and SourceTables are global components — no import needed.
docsUrl / slug rule (prevents 404s)
The website derives the doc slug from the source's docsUrl (its last /docs/cdp/sources/<slug>
segment), so these three must agree:
- The doc filename:
<slug>.md. - The source's
docsUrlinget_source_config:https://posthog.com/docs/cdp/sources/<slug>. - (implicitly) the listing link — now derived from
docsUrl, so it follows automatically.
Use kebab-case for multi-word slugs (active-campaign, not activecampaign). After writing or renaming
a doc, run the audit from this (posthog) repo:
python manage.py audit_source_docs --docs-dir ../posthog.com/contents/docs/cdp/sources
It fails if any source docsUrl points at a missing file or any doc's sourceId isn't a real source.
Renaming a published doc also needs a 301 in posthog.com/vercel.json for both
/docs/cdp/sources/* and /docs/data-warehouse/sources/*.
Checklist
- Frontmatter
sourceIdmatches theExternalDataSourceTypevalue exactly - Intro, Prerequisites, Adding a data source, Sync modes, Configuration, Supported tables, Troubleshooting
- Status snippet +
beta: trueif alpha/beta - Shared snippets used instead of bespoke prose
-
<SourceParameters />and<SourceTables />present (don't hand-write fields or the table list) - If the rendered table list is empty/thin and the source is fixed-schema, enrich its code
(
lists_tables_without_credentials,settings.py,canonical_descriptions.py) — see/implementing-warehouse-sources - Filename,
docsUrl, and slug all agree (kebab-case) -
audit_source_docspasses
Frequently asked questions about Documenting Data Warehouse Sources
Similar skills
Supabase Docs Authoring
Streamline your Supabase documentation process.
Docs Writer
Streamline your documentation process with precision.
Clinical Case Report
Generate structured medical case presentations.
CrossFrame Suite
Streamline complex workflows for Chinese structural analysis.
Em Dash Expert
Master the em dash for clear, precise writing.
Nature Statistics Reporting
Enhance manuscript statistics for high-impact journal submissions.
