# Marketing as Code tdx enables **Marketing as Code**—a paradigm shift from manual UI operations to AI-friendly marketing configurations. Learn with AI New to Marketing as Code? Read the [AI-Native Marketing Book](/treasure-code/book) for a step-by-step guide from setup to segments, journeys, and workflows. ## The Problem Traditional marketing operations rely on clicking through UIs: - **Manual and error-prone** - Complex sequences of clicks that are hard to reproduce - **Invisible to AI** - AI assistants cannot navigate UIs or understand click-based workflows - **Hard to scale** - Cannot easily replicate configurations across brands or environments - **No version control** - Difficult to track changes, review history, or roll back mistakes ## The Solution tdx treats marketing logic as code: | Traditional "Click Ops" | Marketing as Code | | --- | --- | | Configure in UI | Define in YAML files | | Manual testing | Local validation with `tdx` | | Direct production changes | Test locally, then deploy | | Hard to automate | AI agents can read/write | ## YAML as Source of Truth Instead of navigating complex UIs, define your marketing logic in simple YAML files: **Segment Definition (segment.yaml):** ```yaml name: High-Value Customers description: Customers with lifetime value > $1000 rules: - attribute: lifetime_value operator: greater_than value: 1000 activations: - connection: salesforce-prod enabled: true ``` **Journey Definition (journey.yaml):** ```yaml type: journey name: Welcome Series reentry: no_reentry stages: - name: Onboarding steps: - type: activation name: Send Welcome Email with: activation: welcome-email next: wait-for-engagement - type: wait name: Wait for Engagement id: wait-for-engagement with: condition: segment: engaged-users timeout: duration: 7 unit: day next: follow-up - type: activation name: Follow Up id: follow-up with: activation: follow-up-email activations: welcome-email: connection: email-provider follow-up-email: connection: email-provider segments: engaged-users: rules: - attribute: email_opened operator: is_true ``` **Why YAML?** - AI excels at generating structured text like YAML - Human-readable and easy to review - Standard format with excellent tooling support - Avoids hallucinations from complex JSON APIs See [Segment YAML Schema](/treasure-code/commands/segment#segment-yaml-schema) and [Journey YAML Schema](/treasure-code/commands/journey#journey-yaml-schema) for full specifications. ## CDP Architecture CDP resources follow a hierarchical structure: ```mermaid flowchart TB subgraph Parent["Parent Segment (tdx ps)"] Master[(Master Table)] Attrs[Attributes] Behaviors[Behaviors] Master --> Attrs Master --> Behaviors end subgraph Children["Child Segments (tdx sg)"] Seg1[Segment A
Rules + Activations] Seg2[Segment B
Rules + Activations] end subgraph Journeys["Journeys (tdx journey)"] J1[Welcome Series] J2[Re-engagement] end Parent --> Seg1 Parent --> Seg2 Parent --> J1 Parent --> J2 Seg1 --> Act1[Salesforce] Seg2 --> Act2[Facebook] J1 --> Act3[Email Sequence] J2 --> Act4[Push Notifications] ``` **Parent Segment** defines the data foundation: - **Master Table** - Source of customer records - **Attributes** - Customer properties (e.g., lifetime_value, signup_date) - **Behaviors** - Customer actions (e.g., purchases, page_views) **Child Segments** define targeting rules and activations: - Filter customers using attributes and behaviors - Activate to marketing channels (Salesforce, Google Ads, etc.) **Journeys** orchestrate multi-step customer experiences: - Define stages with sequential or conditional steps - Wait for time delays or segment conditions - Branch based on A/B tests or decision points - Activate to channels at each step ## The Lifecycle Marketing as Code follows a familiar development workflow: ```mermaid flowchart LR Define["1. Define
(Code)"] --> Verify["2. Verify
(Test)"] --> Deploy["3. Deploy
(Push)"] ``` Use these commands to manage CDP resources as code: - [`tdx ps`](/treasure-code/commands/parent-segment) (parent-segment) - Pull, edit, and push parent segment YAML files - [`tdx sg`](/treasure-code/commands/segment) (segment) - Pull, edit, and push child segment YAML files - [`tdx journey`](/treasure-code/commands/journey) - Pull, edit, and push journey YAML files ### 1. Define AI generates or you write marketing definitions locally: ```bash # Pull existing resources to YAML tdx sg pull "My Segment" tdx journey pull "My Journey" # AI can modify the YAML files # or create new definitions from scratch ``` ### 2. Verify Test your changes locally before touching production: ```bash # Validate definitions tdx sg validate tdx journey validate # Preview sample data tdx ps preview tdx sg show # Check what would change tdx sg push --dry-run tdx journey push --dry-run ``` ### 3. Deploy Push verified changes to production: ```bash # Deploy segment changes tdx sg push # Deploy journey changes tdx journey push # Deploy parent segment tdx ps push ``` ## Benefits ### Standardization Code is standard. One team's segment definition looks the same as another's—solving scattered, inconsistent configurations. ### Version Control (Optional) Store YAML files in Git to track changes over time. If an AI agent makes a mistake, you can `git revert`. You cannot easily revert a sequence of UI clicks. ### Scalability Copy and adapt YAML files across 100 brands. You cannot copy-paste UI clicks. ### Production Safety Test locally before deploying. Marketing as Code means you don't break production—you validate first. ### AI-Native AI agents can read, write, and test marketing configurations safely. The complexity stays in tdx, not in your prompts. Use [tdx claude](/treasure-code/commands/claude) to launch Claude Code with TD's [AI Foundry](https://docs.treasuredata.com/products/customer-data-platform/ai-agent-foundry) backend—AI can edit your YAML files, validate changes, and deploy segments directly. ## Getting Started ```bash # Install tdx npm install -g @treasuredata/tdx # Authenticate tdx auth setup # Pull resources to start working locally tdx sg pull "My Segment" -u tdx journey pull "My Journey" -u # Make changes to the YAML files, then push tdx sg push tdx journey push ``` ## Learn More - [AI-Native Marketing Book](/treasure-code/book) - Step-by-step guide to Marketing as Code with AI - [Parent Segment Commands](/treasure-code/commands/parent-segment) - Manage parent segments as YAML - [Segment Commands](/treasure-code/commands/segment) - Manage child segments as YAML - [Journey Commands](/treasure-code/commands/journey) - Manage journeys as YAML - [TD Skills](/treasure-code/guide/td-skills) - AI skills for CDP management