# Dryfit — Synthetic PostHog Data with Ground Truth

> Dryfit generates synthetic PostHog event datasets with hidden ground truth so you can deterministically grade any signal-detection agent. MIT licensed, Python.

*Source: [https://www.getbeton.ai/oss-tools/dryfit/](https://www.getbeton.ai/oss-tools/dryfit/)*

## What dryfit does

- Generates synthetic PostHog event tables in Postgres for any business model
- Ships ground_truth.json mapping every positive/negative signal back to event_ids
- 14 prebuilt scenarios — seat-based, usage-based, transaction, freemium, marketplace, etc.
- Configurable noise (missing events, dupes, out-of-order, null props, anonymous actors) — never touches ground-truth rows
- docker compose up brings Postgres + Grafana with a provisioned event-inspection dashboard
- MIT licensed, Python 3.12 with uv/typer/pydantic/psycopg

## Scenarios

- [Combined coverage (all models)](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-combined-coverage/) — A single dataset exercising the union of all supported event names across every business-model variant. Use this when you want one dataset that covers every signal type for Grafana-wide inspection or multi-agent testing.
- [Contact / record-based SaaS](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-contact-record/) — CRM- or marketing-style SaaS priced by record count. Imports and enrichment drive positive signals; segmentation without growth is a negative pattern.
- [Credits / token-based](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-credits-token/) — Prepaid credit or token systems where burn and top-up patterns matter more than traditional funnels. Low-balance warnings into purchases are the key positive signal.
- [Event-volume SaaS](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-event-volume/) — Analytics or observability SaaS priced by ingested volume. Source connections and custom events drive positive signals; stale sources are negatives.
- [Feature-gated (tiered) SaaS](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-feature-gated/) — Tiered SaaS where paywalls drive upgrades. Feature-gate hits followed by upgrade clicks are positive; downgrades and gate-only hits are negative.
- [Freemium-to-paid](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-freemium-to-paid/) — Freemium SaaS where the wedge into paid is running up against free-tier limits. Limit-reached events feeding modals and trial starts are the signal chain.
- [Hybrid (seat + usage)](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-hybrid-seat-usage/) — Hybrid pricing that combines per-seat licensing with metered overage. Positive signals chain through invite, signup, activation, and compute usage — exercising the longest legitimate path in any scenario.
- [Platform / marketplace](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-marketplace/) — Two-sided marketplace where active listings are the key metric. Positive signals chain from account connection through storefront activation to listing publication.
- [PostHog Web (baseline)](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-web/) — The minimum-viable PostHog scenario. A generic event stream with a two-step conversion funnel and corresponding negative path. Good starting point for signal-detection benchmarking before moving to business-model-specific variants.
- [Revenue-share / take-rate](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-revenue-share/) — Take-rate platforms earning a cut of processed bookings. Commission calculation closes the positive funnel; uncalculated payouts are negatives.
- [Seat-based SaaS](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-seat-based/) — Per-seat licensing SaaS where growth is measured in active seats. The funnel runs from invite to signup to seat activation, with deactivation as a churn signal.
- [Storage-based SaaS](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-storage-based/) — Storage-tier SaaS where the expansion signal is growth toward tier limits. Storage warnings serve as quota-risk signals.
- [Transaction / volume-based SaaS](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-transaction-volume/) — Payment and transaction platforms where value tracks with successful throughput. Positive signals end in payment completion; negative signals include refunds and invoice stall.
- [Usage-based (metered) SaaS](https://www.getbeton.ai/oss-tools/dryfit/scenarios/posthog-usage-based/) — Metered SaaS where revenue scales with consumption. Positive signals are completed jobs and compute cycles; negative signals are stalled usage.
- [Telegram Chat](https://www.getbeton.ai/oss-tools/dryfit/scenarios/telegram-chat/) — Simulates a Telegram-like chat environment with user interactions. Different event shape from the PostHog web scenarios — useful for testing agent portability across data sources.

## Links

- GitHub: https://github.com/getbeton/dryfit
- Announcement: https://www.getbeton.ai/blog/we-open-sourced-our-agent-testing-tool/
