# Tracking Plans

<p><strong>Tracking Plans</strong> let you proactively monitor and act on non-compliant event data coming into your RudderStack sources based on predefined plans. This can help you prevent or de-risk situations where any missing or improperly configured event data can break your downstream destinations.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="features">Features</h2><ul>
<li>
<p>Set rules for <code>track</code> and non-<code>track</code> events (<code>identify</code>, <code>page</code>, <code>screen</code>, and <code>group</code>) that you want to send to downstream destinations. You can use these rules to:</p>
<ul>
<li>Define which events should pass through, including events with and without properties.</li>
<li>Specify whether a property or attribute is required and assign the data type required to pass that event.</li>
</ul>
</li>
<li>
<p>Use the <a href="https://www.rudderstack.com/docs/api/event-audit-api/" >Event Audit API</a> to evaluate your inbound events and metadata and compare them with your tracking plans.</p>
</li>
<li>
<p>Iteratively improve your tracking plans and have better control of your data with a robust versioning system.</p>
</li>
<li>
<p>Create and manage your tracking plans in the RudderStack dashboard or programmatically using the <a href="https://www.rudderstack.com/docs/api/data-catalog-api/" >Data Catalog API</a>.</p>
</li>
</ul>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="get-started">Get started</h2><p>See the following guides to learn more about the features and usage of tracking plans:</p>
<table>
  <thead>
      <tr>
          <th>Guide</th>
          <th>Description</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/create-tracking-plans/" >Create a Tracking Plan</a></td>
          <td>Create a new tracking plan in the RudderStack dashboard.</td>
      </tr>
      <tr>
          <td><a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/view-edit-tracking-plans/" >View and Edit Tracking Plans</a></td>
          <td>Manage your tracking plans in the RudderStack dashboard.</td>
      </tr>
      <tr>
          <td><a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/codegen/" >Code Generation (Codegen)</a></td>
          <td>Generate language-specific code snippets based on your defined event schemas.</td>
      </tr>
      <tr>
          <td><a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/observability/" >Tracking Plan Observability</a></td>
          <td>Get complete visibility into the events passing through your tracking plan and any tracking plan violations.</td>
      </tr>
      <tr>
          <td><a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/violation-management/" >Violation Management</a></td>
          <td>Learn about the different violation types in tracking plans and use the information to fix your event instrumentation and avoid future violations.</td>
      </tr>
      <tr>
          <td><a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/migration-guide/" >Migrate Tracking Plans from Spreadsheet</a></td>
          <td>Migrate tracking plans created using the tracking plan spreadsheet to the new format for easier management.</td>
      </tr>
  </tbody>
</table>
<!-- end-chunk -->
<!-- begin-chunk -->
<h2 id="faq">FAQ</h2><!-- end-chunk -->
<!-- begin-chunk -->
<h4 id="which-rudderstack-plans-support-tracking-plans">Which RudderStack plans support tracking plans?</h4><p>The tracking plans feature is supported in the <a href="https://rudderstack.com/pricing/" >Free, Growth, and Enterprise</a> plans. However, the limits vary by plan:</p>
<table>
  <thead>
      <tr>
          <th>Plan</th>
          <th>Tracking plans</th>
          <th>Events per plan</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="https://www.rudderstack.com/pricing/" >Free</a></td>
          <td>1</td>
          <td>5</td>
      </tr>
      <tr>
          <td><a href="https://www.rudderstack.com/pricing/" >Growth</a></td>
          <td>Unlimited</td>
          <td>75</td>
      </tr>
      <tr>
          <td><a href="https://www.rudderstack.com/enterprise-quote/" >Enterprise</a></td>
          <td>Unlimited</td>
          <td>Unlimited</td>
      </tr>
  </tbody>
</table>
<!-- end-chunk -->
<!-- begin-chunk -->
<h4 id="which-events-are-supported-by-the-tracking-plans">Which events are supported by the tracking plans?</h4><p>The tracking plans support <a href="https://www.rudderstack.com/docs/event-spec/standard-events/identify/" ><code>identify</code></a>, <a href="https://www.rudderstack.com/docs/event-spec/standard-events/track/" ><code>track</code></a>, <a href="https://www.rudderstack.com/docs/event-spec/standard-events/page/" ><code>page</code></a>, <a href="https://www.rudderstack.com/docs/event-spec/standard-events/screen/" ><code>screen</code></a>, and <a href="https://www.rudderstack.com/docs/event-spec/standard-events/group/" ><code>group</code></a> events.</p>
<p>Note that the <a href="https://www.rudderstack.com/docs/event-spec/standard-events/alias/" ><code>alias</code></a> call is not supported.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h4 id="does-rudderstack-propagate-the-context-related-to-any-tracking-plan-violations">Does RudderStack propagate the context related to any tracking plan violations?</h4><p>RudderStack propagates any context related to the tracking plan violations to your destinations. You can use this context in your <a href="https://www.rudderstack.com/docs/transformations/overview/" >transformations</a> for filtering or modifying the events before they reach the destination.</p>
<!-- end-chunk -->
<!-- begin-chunk -->
<h4 id="why-do-different-events-show-different-tracking-plan-versions-in-the-live-events-viewer">Why do different events show different tracking plan versions in the live events viewer?</h4><p>Different events may be validated against different tracking plan versions because RudderStack validates each event against the specific version that was used to instrument it.</p>
<p>This happens when:</p>
<ul>
<li>You have multiple app versions deployed simultaneously</li>
<li>Each app version was instrumented using a different tracking plan version</li>
<li>The SDK sends the tracking plan version along with each event</li>
</ul>
<p>This behavior ensures that each event is validated against the exact rules it was designed to follow, and prevents false validation errors when tracking plans evolve over time.</p>
<p>See <a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/observability/#how-validation-works" >Tracking Plan observability</a> for more details.</p>
<br />
