Skip to main content

Setting up account hierarchy

Use your Account model to define parent–child relationships and optional container rows.

Primary references: Configuring the account model, Account model field reference, and Advanced configuration: parent–child.

Map parent_account_id

  1. In Configure → Models → Accounts, map a column to the parent_account_id property.
  2. Values must be the account_id of the parent row, not the parent’s name or CRM name.
  3. The parent row must appear in the same Account model (same query result set). If the parent is missing, FunnelStory cannot attach the child to a parent.
  4. Leave parent_account_id empty (or omit it) for top-level accounts.

After you save and refresh the Account model, open an account in the app and confirm the parent link or hierarchy view (when multi-product and hierarchy are enabled for your workspace).

Rules the product enforces

RuleBehavior
Self-parentIf parent_account_id equals this row’s account_id, the parent link is ignored (treated as a top-level account).
Unknown parentIf the value does not match any account_id in the model, the account has no parent in FunnelStory.
Circular chainsAvoid A → B and B → A (or longer rings); they produce an inconsistent tree and unpredictable rollups.
Multi-level treesAllowed: a child can point to a parent that is itself a child of another account, and so on. Rollups use direct children only; see Parent account rollups.

Container accounts

Some organizations use a parent row only as a rollup bucket (holding company, “All APAC,” internal grouping) with no standalone revenue motion. For those rows, add a custom property:

  • is_container: set to a truthy value FunnelStory recognizes (true, "true", "1", or non-zero numbers). See Advanced configuration for SQL examples.

Effects at a high level:

  • Predictions: container accounts are not scored like leaf customers; scores for containers can be derived from children after child accounts are updated.
  • Other features: several flows treat containers differently from sellable accounts; keep is_container accurate so parents that are real customers stay scored and messaged normally.

If a parent is both a real customer and a grouping parent, leave is_container false and use normal amount / expires_at on that row.

Products on accounts (products)

For multi-product hierarchy, each account should expose products as a JSON array of product_id strings that exist in your Products model. Unknown product ids are dropped on ingest. This list drives product-scoped funnels, filters, and predictions.

See Combine multiple contracts for patterns that build products from joined deal or subscription data.

Verification checklist

  1. Parent exists for every non-empty parent_account_id.
  2. No cycles in parent pointers.
  3. account_id remains unique and stable across refreshes.
  4. products ids match the Products model when you use product funnels or predictions.
  5. Run Refresh model, then spot-check a deep node and a parent in Accounts / revenue views.

If something looks wrong after refresh, use Verification & troubleshooting.