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

# Zapier integration

> Wire your CRM into Instant Compliance with no code.

The simplest integration: Zapier triggers off a contact in your CRM and
sends it to Instant Compliance as a customer, then polls back to update
the CRM contact with the verification result.

## Prerequisites

* An Instant Compliance API key with scopes
  `customers:write customers:read aml:read`. See [Authentication](/authentication).
* A Zapier account.
* A CRM connected to Zapier (HubSpot, Salesforce, Pipedrive, Airtable,
  Google Sheets — anything Zapier supports).

## Part 1 — Push CRM contacts in

<Steps>
  <Step title="Create a new Zap">
    Trigger: your CRM's "New contact" (or "Updated contact") event.
  </Step>

  <Step title="Add an Action: Webhooks by Zapier">
    Choose **Custom Request**.

    | Field              | Value                                                                                                                                   |
    | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
    | Method             | `POST`                                                                                                                                  |
    | URL                | `https://app.instantcompliance.ai/api/v1/customers`                                                                                     |
    | Data Pass-Through? | `No`                                                                                                                                    |
    | Data               | (JSON, see below)                                                                                                                       |
    | Headers            | `Authorization: Bearer ic_live_...`<br />`Content-Type: application/json`<br />`Idempotency-Key: {{zap_id}}-{{step_id}}-{{contact_id}}` |
  </Step>

  <Step title="Map fields">
    ```json theme={null}
    {
      "externalId": "{{contact_id}}",
      "fullName": "{{full_name}}",
      "email": "{{email}}",
      "phone": "{{phone}}"
    }
    ```

    Replace `{{...}}` with Zapier's field pickers.
  </Step>

  <Step title="Test">
    Run the Zap once. Verify the customer appears at
    `https://app.instantcompliance.ai/customers` tagged "Integration".
  </Step>
</Steps>

<Tip>
  The `Idempotency-Key` header makes Zapier's automatic retries safe —
  if the same trigger fires twice we won't create a duplicate.
</Tip>

## Part 2 — Sync results back

Set up a second Zap that polls Instant Compliance for status changes
and updates your CRM.

<Steps>
  <Step title="Schedule trigger">
    Add a **Schedule by Zapier → Every Hour** trigger.
  </Step>

  <Step title="Webhook GET">
    Action: **Webhooks by Zapier → GET**.

    | Field                   | Value                                                                        |
    | ----------------------- | ---------------------------------------------------------------------------- |
    | URL                     | `https://app.instantcompliance.ai/api/v1/customers`                          |
    | Query string parameters | `updated_since` = `{{zap_meta_human_now_minus_1_hour}}`<br />`limit` = `100` |
    | Headers                 | `Authorization: Bearer ic_live_...`                                          |
  </Step>

  <Step title="Iterate the result array">
    Add a **Looping by Zapier** step on the `data` array from the
    previous step.
  </Step>

  <Step title="Update the CRM contact">
    Inside the loop, look up the CRM contact by `external_id` and write
    `kyc_status` + `aml.status` into a custom field. Mark the contact
    as cleared when `kyc_status = VERIFIED` AND `aml.status = CLEAR`.
  </Step>
</Steps>

## Recommended CRM custom fields

| Field            | Type     | Source                                          |
| ---------------- | -------- | ----------------------------------------------- |
| IC Customer ID   | Text     | `id`                                            |
| KYC Status       | Picklist | `kyc_status`                                    |
| AML Status       | Picklist | `aml.status`                                    |
| KYC Completed At | Datetime | `kyc_completed_at`                              |
| IC Cleared       | Boolean  | `kyc_status == VERIFIED && aml.status == CLEAR` |

## Going further

* When [webhooks](/webhooks/overview) ship in v2, you can drop the
  polling Zap entirely — we will push the update to your Zap webhook
  trigger the moment KYC completes.
* For higher-volume workloads, replace Zapier with a tiny scheduled
  script. See [Polling for status](/guides/polling-status).
