Zapier Connector
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:
- A Zapier account (Free tier or above)
- A Brevo account with API access
- A Tajo account with connector permissions
- Node.js 18+ installed (for CLI-based integration development)
Authentication
API Key Authentication
# Set your Zapier Platform credentialsexport ZAPIER_DEPLOY_KEY=your_deploy_keyexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_keyOAuth 2.0
Zapier supports OAuth 2.0 for connecting third-party services within Zaps:
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
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: LASTNAMEWebhook Configuration
Configure Tajo to send events to Zapier webhooks:
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: exponentialAPI 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
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Zapier via webhookawait tajo.connectors.connect('zapier', { webhookUrl: process.env.ZAPIER_WEBHOOK_URL, events: ['contact.created', 'order.completed']});Build a Custom Zapier Integration with Platform CLI
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.tajo.io/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.tajo.io/v1/contacts/sync', body: bundle.inputData }); return response.data; } } } }};
module.exports = App;Handle Incoming Zapier Webhooks
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
connectors: zapier: debug: true log_level: verbose log_webhooks: trueBest Practices
- Use webhooks over polling - Webhooks provide real-time data flow vs. polling delays
- Add error handling - Use Zapier Paths to handle success/failure scenarios
- Deduplicate data - Enable deduplication keys to prevent duplicate records
- Monitor task usage - Set up alerts before reaching task limits
- Use filters wisely - Filter early in Zaps to reduce unnecessary task consumption
- 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
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.