# Act on a request's outcome

Start a Zap when a request is completed, expires or is canceled, and branch on whether the recipient approved, declined or asked for changes.

## Before you start

You need a [Formstep connection in Zapier](https://formstep.io/docs/guides/zapier/connect/) and requests to act on, sent from a Zap as in [Send a request from a Zap](https://formstep.io/docs/guides/zapier/send-a-request/) or from anywhere else: the dashboard, the API or an agent. To branch on a verdict, the form needs a [Decision question](https://formstep.io/docs/requests/decisions-and-approvals/).

## 1. Pick the trigger

Create a Zap, choose **Formstep** as the trigger app, and search for **Request**:

![The Formstep trigger list filtered by Request: Request Canceled, Request Completed and Request Expired, each marked Instant](https://formstep.io/docs/guides/zapier/zapier-request-trigger-events.png)

| Trigger | Fires when | Carries |
| - | - | - |
| Request Completed | The recipient submits the form. | The request, the outcome and every answer. |
| Request Expired | The request reaches its expiry date unanswered. | The request only. |
| Request Canceled | Someone cancels the request, from the dashboard, the API or a Cancel Request step, or Formstep cancels it because the form was moved to trash. | The request and the cancel reason. |

Pick **Request Completed**, pick your account, and choose the form. The Zap fires for requests to that form only.

## 2. Test the trigger

Click **Test trigger**. As with public link triggers, Zapier loads a sample built from the form’s questions, so you can map fields before any request is completed:

![The Request B test record: data › answers with Your Decision (decision) approve, data › display with Your Decision (decision, display) Approve, then data › form and data › request](https://formstep.io/docs/guides/zapier/zapier-request-sample.png)

Where a field key reads differently from its question title, the label names the key in parentheses. **Your Decision (decision)** is the answer whose field key is `decision`, and a mapped field shows the same label.

Besides **answers** and **display**, a request event carries a **request** group:

- **Recipient Email**, **Recipient Name**, **Request External ID**, **Metadata** and **Context**: what you set when you created the request. Use the External ID to find the record the request was about.

- **Outcome**: `approve`, `decline` or `changes`, the recipient’s answer to the Decision question. On this form it is the same value as **Your Decision (decision)**, because the Decision question’s key is `decision`. Outcome is missing when the form has no Decision question.

Zapier receives the same event as a callback. Developers: every field is in the [callback reference](https://formstep.io/docs/developers/callbacks/#payload).

## 3. Map the action

Add the action. The example uses **Email by Zapier** › **Send Outbound Email**, with the recipient’s name and their decision in the subject and the External ID in the body:

![The Send Outbound Email step: To is team@acme.example; Subject is Recipient Name, the word answered, then Your Decision (decision, display); Body is External ID followed by Request External ID](https://formstep.io/docs/guides/zapier/zapier-outcome-email.png)

Publish the Zap. When the recipient completes the request, the email arrives with a subject like _Ada Lovelace answered: Approve_, and the run appears in **Zap history**.

## 4. Continue only on approval

To act on one verdict only, add a **Filter** step between the trigger and the action. Set it to continue only if **Your Decision (decision)** exactly matches `approve`:

![A Filter step: Only continue if 1. Your Decision (decision) (Text) Exactly matches approve](https://formstep.io/docs/guides/zapier/zapier-filter-approve.png)

The filter reads the field key, not the label. The Decision question’s field key is always `decision`, so the same filter works on every form, whatever the question’s title. **Outcome** holds the same value.

Compare against the value from **answers**. The label from **display** changes when you rename the option or the recipient answers in another language, while the value stays the same. To handle each verdict differently, use **Paths** instead of a filter, one path per value.

For example, `approve` moves the deal on, `decline` tells the account owner, and `changes` sends the answer to **What should change?** to the account owner.

> **Filters and Paths need a paid Zapier plan**
>
> A Zap with a Filter or Paths step has more than two steps, and Zapier’s Free plan publishes only two-step Zaps. On Free, keep the trigger and one action, and branch in the app the action writes to.

## If the Zap does not start

- A test request never starts a Zap, whether it was created with Test Request on or with **Try it yourself**. Send a real request to check the Zap.

- The trigger listens only to the form you chose in step 1.

- The Zap is off, or uses a connection to another workspace. See the checks in [the public link guide](https://formstep.io/docs/guides/zapier/public-link-submissions/#troubleshooting).

## Next steps

[Find, remind and cancel requests](https://formstep.io/docs/guides/zapier/send-a-request/#manage-requests) — Find a request by External ID, remind the recipient, or withdraw it

[Decisions & approvals](https://formstep.io/docs/requests/decisions-and-approvals/) — The Decision question and its three values
