> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revyops.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Zapier

> Send contacts, companies, activities and deals into RevyOps from thousands of other apps.

## What This Integration Does

The RevyOps app on Zapier lets your Zaps write to RevyOps: create or update contacts and companies,
log activities, create and update opportunities, and look records up. A Zap could, for example, add
every new form submission as a contact, or create an opportunity when a meeting is booked.

<Note>
  The RevyOps Zapier app is invite-only for now. Ask your RevyOps contact for the invite link.
</Note>

## Setup

<Steps>
  <Step title="Accept the invite">
    Open the invite link and accept it. RevyOps then appears when you search for apps in the Zap
    editor.
  </Step>

  <Step title="Copy your read-write API key">
    In RevyOps, open the [Developer](/settings/developer) page and copy the workspace's
    **read-write** key from the **Keys** tab. It starts with `RV-`. A read-only (`RO-`) key is
    refused when you connect.
  </Step>

  <Step title="Connect RevyOps in Zapier">
    Add a RevyOps step to a Zap, click **Sign in**, and paste the key. The connection is named after
    the workspace, so you can tell your clients' connections apart.
  </Step>
</Steps>

Each key connects one client workspace. If you run several clients, connect each with its own key.

## Example Zaps

| When this happens in another app | Add these RevyOps steps |
| - | - |
| A form is submitted (Typeform, Webflow, HubSpot Forms) | **Find or Create Contact** with the email, name and company domain, plus any custom fields from the form |
| A meeting is booked (Calendly, Chili Piper) | **Find or Create Contact**, then **Log Custom Activity** (for example "Meeting booked"), then **Create Opportunity** linked by the contact's email |
| Someone attends a webinar (Zoom, Livestorm) | **Find or Create Contact**, then **Log Custom Activity** with your "Webinar attended" type and its fields |
| A call is logged in your dialer (Aircall, JustCall) | **Log Activity** with the type **Call**, the direction, duration and notes |
| A reply is tagged in your inbox (Gmail, Outlook) | **Mark Reply as Interested** with the lead's email |
| A row is added to a sheet (Google Sheets, Airtable) | **Create or Update Company** with the domain, then **Create or Update Contact** with the company domain to link them |

## Actions

| Action | What it does |
| - | - |
| **Create or Update Contact** | Finds a contact by email, LinkedIn URL or phone and updates it, or creates it if none matches. |
| **Create or Update Company** | Finds a company by domain and updates it, or creates it. A full website URL also works. |
| **Log Activity** | Logs an email, LinkedIn message, call, SMS or WhatsApp message on an existing contact. |
| **Log Custom Activity** | Logs one of your [custom activity types](/user-guide/activities-and-scoring) on a contact or company, with its own fields. |
| **Create Opportunity** | Creates a deal linked to existing contacts (by email) or companies (by domain). |
| **Update Opportunity** | Changes a deal's stage, status, amount and other fields. |
| **Mark Reply as Interested** | Marks a lead's latest reply as interested, and passes it on to Close or HubSpot if connected. |

## Searches

| Search | What it does |
| - | - |
| **Find Contact** | Finds a contact by email, LinkedIn URL or phone. |
| **Find Company** | Finds a company by domain. |
| **Find Opportunity** | Finds a deal by its RevyOps ID, including deals synced from Close or HubSpot. |

**Find or Create Contact** and **Find or Create Company** do the search and, if nothing matches,
create the record in the same step.

## Custom Fields

Create or Update Contact, Create or Update Company, Create Opportunity and Update Opportunity show
one field for each custom field in the workspace, with its type: dropdowns list their options,
multi-selects take several values, and dates are saved as `YYYY-MM-DD`. A custom field you add in
RevyOps shows up in Zapier the next time you open the step, with no update needed.

## What Each Step Takes and Returns

<AccordionGroup>
  <Accordion title="Create or Update Contact">
    **Takes:** at least one of Email, LinkedIn URL or Phone (phone in international format, for
    example `+14155550123`), then First Name, Last Name, Job Title, Company Domain (a RevyOps company
    ID also works), Status, Do Not Contact, and your custom fields.

    **Returns:** the contact's ID, email, LinkedIn URL, phone, name, job title, company ID, status,
    when it was last updated, and its custom fields.
  </Accordion>

  <Accordion title="Create or Update Company">
    **Takes:** Domain (required; `https://www.acme.com/about` is saved as `acme.com`), Name,
    LinkedIn URL, Status, and your custom fields.

    **Returns:** the company's ID, domain, name, LinkedIn URL, status and when it was last updated.
  </Accordion>

  <Accordion title="Log Activity">
    **Takes:** the Activity Type, the contact's Email, LinkedIn URL or Phone, an optional Source,
    and the type's own fields:

    * **Email:** email type (outbound, inbound or bounced), subject, body, interested, opened at
    * **LinkedIn Message:** event (message, InMail or connection request, sent or replied), message
    * **Call:** direction, duration in seconds, notes
    * **SMS** and **WhatsApp:** direction, message

    Every type takes **Happened At**; leave it empty to use the current time.

    **Returns:** the activity's ID and type.
  </Accordion>

  <Accordion title="Log Custom Activity">
    **Takes:** one of your custom activity types, then either the contact's Email, LinkedIn URL or
    Phone, or the company's Domain, depending on what the type applies to. The type's own fields
    follow, with their types and options. **Happened At** and **Source** are optional.

    **Returns:** the activity's ID, the type's key and its name.
  </Accordion>

  <Accordion title="Create Opportunity">
    **Takes:** Name (required), Contact Emails and Company Domains to link (or their RevyOps IDs),
    Amount in USD, Stage, Status (Active, Won or Lost), Pipeline, Confidence from 0 to 100, Value
    Period, Deal Type, Close Date, Note, Lost Reason and Lost Reason Category, and your opportunity
    custom fields. Link at least one contact or company. Without a company, the contacts' own
    companies are linked.

    **Returns:** the opportunity's ID, name, amount, stage, status, pipeline, close date, whether
    it can be edited in RevyOps, and where it came from.
  </Accordion>

  <Accordion title="Update Opportunity">
    **Takes:** the Opportunity ID (from Create Opportunity or Find Opportunity) and any of the
    fields above except the links. Only the fields you fill in change.

    **Returns:** the updated opportunity, as Create Opportunity does.
  </Accordion>

  <Accordion title="Mark Reply as Interested">
    **Takes:** the lead's email (required), an optional subject to pick the thread when the lead
    replied more than once, and an optional disposition such as "Meeting request".

    **Returns:** the email and subject, and that the change was queued.
  </Accordion>

  <Accordion title="Searches">
    **Find Contact** takes exactly one of Email, LinkedIn URL or Phone. **Find Company** takes a
    domain or website URL. **Find Opportunity** takes the RevyOps opportunity ID. Each returns the
    same fields as the matching create step, or nothing found, which you can use in a Zapier
    filter or path.
  </Accordion>
</AccordionGroup>

## Good to Know

* **Records must exist before you log on them.** Log Activity, Log Custom Activity and Create
  Opportunity stop with a clear message when no contact or company matches. Put **Find or Create
  Contact** or **Find or Create Company** earlier in the Zap.
* **Update Opportunity doesn't change links.** It leaves the deal's contacts and companies as they
  are. Deals synced from Close or HubSpot only accept custom fields here; edit the rest in your CRM.
* **Mark Reply as Interested runs in the background**, within moments. A lead you emailed who never
  replied gets an interested reply recorded for reporting. A lead with no email history is skipped.
* **Source** on Log Activity and Log Custom Activity is optional. Leave it empty to record the
  activity as RevyOps. Any other source must first be enabled for that activity type under
  [Activities & Scoring](/user-guide/activities-and-scoring).
* **Busy Zaps are slowed, not dropped.** Each API key has a request rate limit. A Zap that goes
  faster is slowed down, and Zapier retries the step, so nothing is lost. Zapier, Clay and your
  own scripts share the limit when they use the same key.
* **No triggers yet.** Zaps can't start from something that happens in RevyOps yet. Start them in
  another app and use RevyOps for the actions and searches.

## Troubleshooting

<AccordionGroup>
  <Accordion title="RevyOps rejected the API key. Reconnect RevyOps with a current key.">
    The key was deleted or replaced in RevyOps. Copy the current read-write key from the
    [Developer](/settings/developer) page and reconnect the account in Zapier under **My Apps**.
  </Accordion>

  <Accordion title="That is not a RevyOps API key: it contains spaces or line breaks.">
    Something other than the key was pasted. Copy only the key, which starts with `RV-`, and paste
    it again.
  </Accordion>

  <Accordion title="This is a read-only (RO-) key">
    Zapier needs the workspace's read-write key, which starts with `RV-`, because every action
    writes to RevyOps.
  </Accordion>

  <Accordion title="RevyOps refused this request">
    Check that you connected the read-write key. If you did, API access may be turned off for the
    workspace; ask your RevyOps contact to turn it on.
  </Accordion>

  <Accordion title="No contact in RevyOps has email ... / No company in RevyOps has the domain ...">
    The record doesn't exist yet. Add **Find or Create Contact** or **Find or Create Company** as an
    earlier step and use its result.
  </Accordion>

  <Accordion title="Unknown source">
    The Source you entered isn't set up for that activity type. Add and enable it under
    [Activities & Scoring](/user-guide/activities-and-scoring), or leave Source empty.
  </Accordion>

  <Accordion title="That activity type no longer exists in RevyOps. Pick it again.">
    The custom activity type was deleted or renamed. Open the step and choose the type again.
  </Accordion>

  <Accordion title="A custom field is missing from the step">
    Custom fields load when you open the step. Click **Refresh fields** in the Zap editor after
    adding a field in RevyOps.
  </Accordion>
</AccordionGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.