# Route each request to the right team

A shared request form serves sales, billing, and support. Each submission needs one owner, and anything unexpected needs a safe place to land.

<dl class="fc-recipe-meta not-content" aria-label="Recipe details">
	<div class="fc-recipe-meta__group">
		<dt class="fc-recipe-meta__label">Good for</dt>
		<dd class="fc-recipe-meta__value">Support and operations teams using one intake form</dd>
	</div>
	<div class="fc-recipe-meta__group fc-recipe-meta__group--level">
		<dt class="fc-recipe-meta__label">Level</dt>
		<dd class="fc-recipe-meta__value">
			<span class="fc-recipe-meta__level" data-level="starter">
				<svg class="fc-recipe-meta__level-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
					<rect class="fc-recipe-meta__level-bar" x="1" y="10" width="3" height="4" rx="1" />
					<rect class="fc-recipe-meta__level-bar" x="6.5" y="6" width="3" height="8" rx="1" />
					<rect class="fc-recipe-meta__level-bar" x="12" y="2" width="3" height="12" rx="1" />
				</svg>
				Starter
			</span>
		</dd>
	</div>
</dl>

## What you'll build

A [Switch](/documentation/flowcrafter/nodes/logic/switch/) reads the request type and takes the first matching branch. Each branch records its owner on the entry before sending that team's notification. The Default branch marks the request for triage instead of losing it.

```mermaid
flowchart TD
    A[Form Submitted] --> B{Route by request type}
    B -->|Sales| C[Set owner: Sales]
    B -->|Billing| D[Set owner: Billing]
    B -->|Support| E[Set owner: Support]
    B -->|Default| F[Set status: Needs triage]
    C --> G[Send sales notification]
    D --> H[Send billing notification]
    E --> I[Send support notification]
    F --> J[Email the triage inbox]
```

![Team-routing workflow with Sales, Billing, Support, and Default triage paths](/documentation/flowcrafter/screenshots/use-case-route-to-the-right-team-workflow.png)

## Before you build

- Add a visible **Request type** field with the exact values used by the routing cases.
- Add administrative **Owner** and **Routing status** fields so submitters cannot choose their owner or mark routing complete.
- Create one Gravity Forms notification per team, or collect the team inboxes for [Send Email](/documentation/flowcrafter/nodes/actions/send-email/) nodes.
- Choose a monitored triage inbox for unmatched values.

## Build it step by step

1. Open your intake form and add a visible **Request type** field.
2. Add **Owner** and **Routing status** fields with **Administrative** visibility. Submitters choose the request type; only staff and trusted automation should control ownership and status.
3. Navigate to **Workflows** in the form toolbar. Click **New Workflow**, then **Add Trigger**, and choose [Form Submitted](/documentation/flowcrafter/nodes/triggers/form-submitted/).
4. Add a Switch node named **Route by request type**. Add cases for Sales, Billing, and Support using the submitted field. Switch nodes check cases from top to bottom and take only the first match.

   
   ![Switch settings comparing the submitted request type with Sales and Billing](/documentation/flowcrafter/screenshots/use-case-route-to-the-right-team-settings.png)

5. On each named branch, add [Update Entry Field](/documentation/flowcrafter/nodes/actions/update-entry-field/) named for that team. Set **Field** to Owner and **New value** to `Sales`, `Billing`, or `Support`. Add a second Update Entry Field setting **Routing status** to `Assigned`, then follow it with that team's [Send Notification](/documentation/flowcrafter/nodes/actions/send-notification/) or Send Email.
6. On **Default**, set the routing status to `Needs triage` and email a shared inbox with `{{ "Form Submitted".mergeTag('{all_fields}') }}`.

:::tip[Add richer routing when the workflow grows]
Use [GP Advanced Conditional Logic](https://gravitywiz.com/documentation/gravity-forms-advanced-conditional-logic/) when a case needs nested groups, user-aware rules, or date comparisons.
:::

## Data passed between nodes

| From | Data used later | Where it goes |
|---|---|---|
| Form Submitted | Request type, full entry, and entry identity | Switch, owner update, and messages |
| Switch | First matching output label | Exactly one team path |
| Update Entry Field | Updated entry `entry_id` | Later entry-aware nodes or feeds added to that path |

## Edge cases

- Case comparisons must match the field's saved values, not just its display labels.
- Cases run top to bottom and stop at the first match. Put narrow rules before broad ones.
- Default is required operationally even though the builder allows a branch with nothing connected.
- If routing only sends conditional notifications, native Gravity Forms conditional logic is simpler; use this workflow when you also need one-winner routing, status, or later steps.

## Test and activate safely

New workflows start **Inactive**. Use builder tests for every case plus one unknown value, or temporarily activate with test inboxes for controlled live submissions. Confirm each entry records one owner, sends one team message, and sends the unknown value to triage. Replace test inboxes, activate for production, and watch the first run through Default as closely as the named paths.

## What Flowcrafter adds

Gravity Forms notification conditional logic is usually enough when each department only needs its own email. Flowcrafter becomes useful when routing is a process: exactly one branch wins, the decision is written back to the entry, every branch can grow independently, and Default provides a visible fallback.

## Related resources

- [Switch](/documentation/flowcrafter/nodes/logic/switch/) — first-match routing with a Default branch
- [Update Entry Field](/documentation/flowcrafter/nodes/actions/update-entry-field/) — keep the owner visible on the entry
- [Send Notification](/documentation/flowcrafter/nodes/actions/send-notification/) — send an existing Gravity Forms notification at this point
- [Branching & Conditional Logic](/documentation/flowcrafter/building/branching-and-conditions/) — build and test the paths
