Iterable Connector
Connect your Iterable growth marketing platform to Brevo for unified customer engagement, cross-channel campaign coordination, and consolidated analytics across marketing tools.
Overview
| Property | Value |
|---|---|
| Platform | Iterable |
| Category | Marketing |
| Setup Complexity | Moderate |
| Official Integration | No |
| Data Synced | Users, Events, Campaigns, Catalogs |
| API Type | REST API |
| Authentication | API Key |
| Base URL | https://api.iterable.com/api/ |
Features
- User profile sync - Bidirectional user data synchronization with Brevo contacts
- Campaign analytics - Sync campaign send, open, and click metrics for unified reporting
- Experiment data - Track A/B test results and winning variants
- Catalog sync - Synchronize product and content catalogs across platforms
- Workflow events - Forward workflow trigger and completion events to Brevo
- Channel preference sync - Replicate user communication preferences in Brevo
Prerequisites
Before you begin, ensure you have:
- An Iterable account with API access
- An Iterable API key with appropriate permissions
- Your Iterable project ID
- A Brevo account with API access
- A Tajo account with an active subscription
Authentication
Iterable uses API key authentication passed in the request header.
Creating an API Key
- Log in to your Iterable dashboard
- Navigate to Integrations > API Keys
- Click New API Key
- Name it “Tajo Integration”
- Select Server-side key type
- Grant the following permissions:
Users: Read/WriteEvents: Read/WriteCampaigns: ReadLists: Read/WriteCatalogs: ReadExperiments: ReadWorkflows: ReadTemplates: ReadChannels: ReadMessage Types: ReadKey Type Matters
Always use a Server-side API key for Tajo integration. Mobile and JavaScript-side keys have restricted permissions and cannot access all required endpoints.
Connecting to Tajo
tajo connectors install iterable \ --api-key $ITERABLE_API_KEYConfiguration
Basic Setup
connectors: iterable: enabled: true
sync: users: true events: true campaigns: true catalogs: true experiments: true
lists: all_users: 16 engaged_users: 17 inactive_users: 18Field Mapping
Map Iterable user fields to Brevo contact attributes:
field_mapping: # Standard fields userId: ITERABLE_ID email: email firstName: FIRSTNAME lastName: LASTNAME phoneNumber: SMS
# Engagement data signupDate: SIGNUP_DATE totalPurchases: TOTAL_PURCHASES lastPurchaseDate: LAST_PURCHASE
# Custom fields plan_name: PLAN_NAME company_size: COMPANY_SIZE preferred_channel: PREFERRED_CHANNEL lifecycle_stage: LIFECYCLE_STAGEEvent Configuration
event_mapping: # Iterable event -> Brevo event purchase: ORDER_PLACED addToCart: CART_UPDATED pageView: PAGE_VIEWED appOpen: APP_OPENED pushOpen: PUSH_ENGAGEDAPI Endpoints
Tajo integrates with the following Iterable API endpoints:
| Endpoint | Method | Purpose |
|---|---|---|
/users/update | POST | Update user profiles |
/users/{email} | GET | Retrieve user by email |
/users/bulkUpdate | POST | Batch update users |
/events/track | POST | Track custom events |
/events/trackBulk | POST | Batch track events |
/campaigns | GET | List all campaigns |
/campaigns/metrics | GET | Campaign performance data |
/experiments/metrics | GET | Experiment results |
/lists | GET | List all user lists |
/lists/subscribe | POST | Add users to a list |
/lists/unsubscribe | POST | Remove users from a list |
/catalogs/{catalogName}/items | GET | Retrieve catalog items |
/channels | GET | List messaging channels |
/export/data.json | GET | Export raw event data |
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});
await tajo.connectors.connect('iterable', { apiKey: process.env.ITERABLE_API_KEY});Sync Users
// Incremental user sync from Iterable to Brevoawait tajo.connectors.sync('iterable', { type: 'incremental', resources: ['users'], since: '2024-01-01', batchSize: 50});
const status = await tajo.connectors.status('iterable');console.log(status);// {// connected: true,// lastSync: '2024-03-15T09:45:00Z',// usersCount: 58700,// campaignsTracked: 42,// eventsProcessed: 210000// }Track Events
// Forward Iterable events to Brevoawait tajo.connectors.handleEvent('iterable', { type: 'custom_event', payload: { eventName: 'subscription_upgraded', dataFields: { previousPlan: 'starter', newPlan: 'pro', mrr: 99.00 } }});Webhook Handler
// Handle Iterable system webhooksapp.post('/webhooks/iterable', async (req, res) => { const event = req.body;
await tajo.connectors.handleWebhook('iterable', { type: event.eventName, payload: event });
res.status(200).send('OK');});Rate Limits
Iterable enforces rate limits based on your plan:
| Plan | Rate Limit | Bulk Endpoint Limit |
|---|---|---|
| Growth | 500 requests/second | 500 requests/second |
| Enterprise | Custom | Custom |
Specific endpoint limits:
| Endpoint | Limit |
|---|---|
/users/update | 500 req/s |
/users/bulkUpdate | 500 req/s (1,000 users per request) |
/events/track | 500 req/s |
/events/trackBulk | 500 req/s (8,000 events per request) |
/export/data.json | 4 concurrent requests |
Bulk Endpoints
Tajo automatically batches user updates (up to 1,000 per call) and event tracks (up to 8,000 per call) to maximize throughput while staying within rate limits.
Troubleshooting
Common Issues
| Issue | Cause | Solution |
|---|---|---|
| 401 Unauthorized | Invalid API key | Verify key in Iterable > Integrations > API Keys |
| Users not syncing | Key type mismatch | Ensure you are using a Server-side API key |
| Missing campaign data | Insufficient permissions | Add Campaigns Read permission to API key |
| Export timeout | Large data volume | Use date range filters to reduce export size |
| Duplicate users | Inconsistent identifiers | Use email as primary identifier consistently |
Debug Mode
connectors: iterable: debug: true log_level: verbose log_api_calls: trueTest Connection
tajo connectors test iterable# ✓ API connection successful# ✓ User data accessible# ✓ Campaign list readable# ✓ Event tracking operational# ✓ List management availableBest Practices
- Use bulk endpoints - Always prefer
bulkUpdateandtrackBulkfor large data volumes - Deduplicate by email - Use email as the consistent identifier across Iterable and Brevo
- Sync incrementally - Use date ranges to avoid re-processing historical data
- Map channel preferences - Sync opt-in/opt-out status to maintain compliance
- Monitor export jobs - Large exports can take time; set up status polling
- Test with non-production project - Validate mappings before syncing production data
Security
- API Key Authentication - Server-side keys with granular permissions
- HTTPS Only - All API communication encrypted via TLS 1.2+
- Key Rotation - Support for multiple active API keys during rotation
- Encrypted Storage - API credentials encrypted at rest in Tajo
- JWT Webhooks - Webhook payloads signed with JWT for verification
Related Resources
Open-Source Implementation Map
No official open-source repository was found in the current Tajo connector catalog for Iterable. 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.