---
title: "Zapier Connector"
description: "Complete Zapier integration guide for connecting thousands of apps to Brevo through Tajo using Zaps, webhooks, and the Zapier Platform CLI."
url: https://tajo.io/docs/connectors/custom/zapier/
markdown: https://tajo.io/docs/connectors/custom/zapier.md
lang: en-US
robots: noindex
---

# Zapier Connector

Connector status: Planned Not built yet. Tajo does not run this connector today.

| Source field | Destination field | Sample value |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Connect Zapier to Brevo through Tajo to bridge thousands of third-party applications with your marketing automation workflows, enabling no-code data flows and event-driven triggers across your entire tech stack.

## Overview

| Property | Value |
| --- | --- |
| **Platform** | Zapier |
| **Category** | Automation (Custom) |
| **Setup Complexity** | Easy |
| **Official Integration** | No |
| **Data Synced** | Events, Contacts, Workflows, Triggers |
| **Auth Method** | API Key / OAuth 2.0 |

## Features

- **Multi-app orchestration** - Connect 6,000+ apps to Brevo via Zap workflows
- **Webhook triggers** - Receive real-time events from any Zapier-connected app
- **Contact sync** - Push and pull contacts between Zapier-connected platforms and Brevo
- **Event forwarding** - Route application events through Tajo into Brevo automations
- **Multi-step Zaps** - Build complex workflows with filters, formatters, and delays
- **Custom Zapier app** - Use the Zapier Platform CLI to build tailored integrations

## Prerequisites

Before you begin, ensure you have:

1. A Zapier account (Free tier or above)
2. A Brevo account with API access
3. A Tajo account with connector permissions
4. Node.js 18+ installed (for CLI-based integration development)

## Authentication

### API Key Authentication

```bash
# Set your Zapier Platform credentials
export ZAPIER_DEPLOY_KEY=your_deploy_key
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
```

### OAuth 2.0

Zapier supports OAuth 2.0 for connecting third-party services within Zaps:

```javascript
const authentication = {
  type: 'oauth2',
  oauth2Config: {
    authorizeUrl: {
      url: 'https://your-app.com/oauth/authorize',
      params: {
        client_id: '{{process.env.CLIENT_ID}}',
        state: '{{bundle.inputData.state}}',
        redirect_uri: '{{bundle.inputData.redirect_uri}}',
        response_type: 'code'
      }
    },
    getAccessToken: {
      url: 'https://your-app.com/oauth/token',
      method: 'POST',
      body: {
        code: '{{bundle.inputData.code}}',
        client_id: '{{process.env.CLIENT_ID}}',
        client_secret: '{{process.env.CLIENT_SECRET}}',
        grant_type: 'authorization_code',
        redirect_uri: '{{bundle.inputData.redirect_uri}}'
      }
    },
    refreshAccessToken: {
      url: 'https://your-app.com/oauth/token',
      method: 'POST',
      body: {
        refresh_token: '{{bundle.authData.refresh_token}}',
        client_id: '{{process.env.CLIENT_ID}}',
        client_secret: '{{process.env.CLIENT_SECRET}}',
        grant_type: 'refresh_token'
      }
    }
  }
};
```

## Configuration

### Basic Setup

```yaml
connectors:
  zapier:
    enabled: true
    webhook_url: "https://hooks.zapier.com/hooks/catch/YOUR_HOOK_ID"

    sync:
      contacts: true
      events: true
      workflows: true

    triggers:
      - contact_created
      - order_placed
      - form_submitted

    mapping:
      email: email
      first_name: FIRSTNAME
      last_name: LASTNAME
```

### Webhook Configuration

Configure Tajo to send events to Zapier webhooks:

```yaml
webhooks:
  zapier:
    url: "https://hooks.zapier.com/hooks/catch/YOUR_HOOK_ID"
    events:
      - contact.created
      - contact.updated
      - order.completed
      - cart.abandoned
    retry:
      max_attempts: 3
      backoff: exponential
```

## API Endpoints

| Endpoint | Method | Description |
| --- | --- | --- |
| `https://hooks.zapier.com/hooks/catch/{id}` | POST | Webhook catch hook |
| `https://nla.zapier.com/api/v1/dynamic/exposed/` | GET | List exposed actions |
| `https://nla.zapier.com/api/v1/dynamic/exposed/{action_id}/execute/` | POST | Execute an action |
| `https://zapier.com/api/platform/cli/apps` | GET | List registered apps |
| `https://zapier.com/api/platform/cli/push` | POST | Deploy integration |

## Code Examples

### Initialize Connector

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect Zapier via webhook
await tajo.connectors.connect('zapier', {
  webhookUrl: process.env.ZAPIER_WEBHOOK_URL,
  events: ['contact.created', 'order.completed']
});
```

### Build a Custom Zapier Integration with Platform CLI

```javascript
const { version: platformVersion } = require('zapier-platform-core');

const App = {
  version: require('./package.json').version,
  platformVersion,
  authentication,
  triggers: {
    new_contact: {
      key: 'new_contact',
      noun: 'Contact',
      display: {
        label: 'New Contact in Tajo',
        description: 'Triggers when a new contact is synced.'
      },
      operation: {
        perform: async (z, bundle) => {
          const response = await z.request({
            url: 'https://api.example.com/v1/contacts',
            params: { since: bundle.meta.lastPoll }
          });
          return response.data;
        }
      }
    }
  },
  creates: {
    sync_contact: {
      key: 'sync_contact',
      noun: 'Contact',
      display: {
        label: 'Sync Contact to Brevo',
        description: 'Syncs a contact to Brevo via Tajo.'
      },
      operation: {
        inputFields: [
          { key: 'email', required: true, type: 'string' },
          { key: 'firstName', type: 'string' },
          { key: 'lastName', type: 'string' }
        ],
        perform: async (z, bundle) => {
          const response = await z.request({
            method: 'POST',
            url: 'https://api.example.com/v1/contacts/sync',
            body: bundle.inputData
          });
          return response.data;
        }
      }
    }
  }
};

module.exports = App;
```

Caution

The `example.com` address above is a placeholder until the Tajo endpoint is available.

### Handle Incoming Zapier Webhooks

```javascript
app.post('/webhooks/zapier', async (req, res) => {
  const { event, data } = req.body;

  await tajo.connectors.handleWebhook('zapier', {
    topic: event,
    payload: data
  });

  res.status(200).json({ status: 'received' });
});
```

## Rate Limits

| Plan | Requests | Tasks/Month | Polling Interval |
| --- | --- | --- | --- |
| Free | 100/day | 100 | 15 min |
| Starter | 1,000/day | 750 | 15 min |
| Professional | 5,000/day | 2,000 | 2 min |
| Team | 10,000/day | 50,000 | 1 min |

Zapier Task Limits

Each Zap step counts as a task. Multi-step Zaps consume multiple tasks per execution. Monitor your task usage in the Zapier dashboard to avoid overages.

## Troubleshooting

| Issue | Cause | Solution |
| --- | --- | --- |
| Webhook not firing | Zap turned off | Check Zap status in Zapier dashboard |
| Data not mapping | Field name mismatch | Verify field keys match between apps |
| Duplicate contacts | No dedup configured | Enable email-based deduplication in Tajo |
| Zap errors | API rate limit hit | Add delay steps or upgrade Zapier plan |
| Auth expired | Token not refreshed | Re-authenticate the connection in Zapier |

### Debug Mode

```yaml
connectors:
  zapier:
    debug: true
    log_level: verbose
    log_webhooks: true
```

## Best Practices

1. **Use webhooks over polling** - Webhooks provide real-time data flow vs. polling delays
2. **Add error handling** - Use Zapier Paths to handle success/failure scenarios
3. **Deduplicate data** - Enable deduplication keys to prevent duplicate records
4. **Monitor task usage** - Set up alerts before reaching task limits
5. **Use filters wisely** - Filter early in Zaps to reduce unnecessary task consumption
6. **Version your CLI integrations** - Use semantic versioning for Platform CLI apps

## Security

- **HTTPS only** - All webhook URLs must use HTTPS
- **API key rotation** - Rotate keys periodically via Zapier dashboard
- **OAuth 2.0** - Use OAuth for third-party service authentication
- **Webhook verification** - Validate incoming webhook signatures
- **Scoped permissions** - Grant minimum required access per Zap

## Related Resources

- [Segment Connector](https://tajo.io/docs/connectors/custom/segment)
- [Brevo Connector](https://tajo.io/docs/connectors/marketing/brevo)
- [Customer Sync Skill](https://tajo.io/docs/skills/data-sync/customer-sync)
- [Zapier Platform CLI Documentation](https://platform.zapier.com/reference/cli-docs)

## Open-Source Implementation Map

No official open-source repository was found in the current Tajo connector catalog for Zapier. Keep this page focused on the verified public API contract and vendor documentation until an official schema, SDK, MCP server, or public integration repository is available.

### Tajo Revamp Checklist

- Verify authentication and scope requirements against the vendor documentation before each connector release.
- Document primary sync objects, external IDs, pagination strategy, and rate limits explicitly.
- Add smoke tests from public API examples rather than undocumented behavior.
- Capture webhook signature verification and replay protection when the vendor supports webhooks.
- Record gaps where no official public repository or schema exists so future maintainers know what still needs source-backed validation.
