---
title: "Connecteur Airtable"
description: "Guide complet d'intégration Airtable pour synchroniser bases, tables et enregistrements avec les contacts et listes Brevo via Tajo."
url: https://tajo.io/fr/docs/connectors/custom/airtable/
markdown: https://tajo.io/fr/docs/connectors/custom/airtable.md
lang: fr-FR
robots: noindex
---

Demandez un accès anticipé

Indiquez votre prénom et votre adresse e-mail professionnelle. Nous vous enverrons un lien pour confirmer votre demande d’accès à Tajo.

# Connecteur Airtable

Statut du connecteur: Prévu Pas encore construit. Tajo n'exécute pas ce connecteur aujourd'hui.

| Champ source | Champ de destination | Valeur d’exemple |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Connectez vos bases Airtable à Brevo pour la synchronisation CRM, la gestion de catalogue produits et des workflows marketing automatisés pilotés par des données structurées via Tajo.

## Vue d’ensemble

| Propriété | Valeur |
| --- | --- |
| **Plateforme** | Airtable |
| **Catégorie** | Custom |
| **Complexité d’installation** | Facile |
| **Intégration officielle** | Non |
| **Données synchronisées** | Enregistrements, tables, utilisateurs |
| **Type d’API** | API REST |
| **Authentification** | Personal Access Token / OAuth 2.0 |
| **URL de base** | `https://api.airtable.com/v0/` |

## Fonctionnalités

- **Synchronisation table-vers-liste**, Synchronisez les enregistrements de tables Airtable directement vers des listes de contacts Brevo
- **Pont catalogue produits**, Utilisez les tables Airtable comme catalogues produits pour les recommandations par e-mail
- **Synchronisation CRM**, Synchronisation bidirectionnelle entre le CRM Airtable et les contacts Brevo
- **Événements de soumission de formulaire**, Transférez les soumissions de formulaires Airtable sous forme d’événements Brevo
- **Filtrage par vue**, Synchronisez des vues Airtable spécifiques vers des listes Brevo ciblées
- **Automatisation par webhook**, Déclenchez des campagnes Brevo lorsque les enregistrements Airtable changent

## Prérequis

Avant de commencer, assurez-vous de disposer de :

1. Un compte Airtable (plan Free ou supérieur)
2. Un Personal Access Token ou une application OAuth configurée
3. L’accès aux bases et tables que vous souhaitez synchroniser
4. Un compte Brevo avec accès API
5. Un compte Tajo avec un abonnement actif

## Authentification

Airtable prend en charge les Personal Access Tokens et OAuth 2.0.

### Option 1 : Personal Access Token (recommandé)

1. Rendez-vous sur [airtable.com/create/tokens](https://airtable.com/create/tokens)
2. Cliquez sur **Create new token**
3. Nommez-le « Tajo Integration »
4. Ajoutez les scopes :

```
data.records:read
data.records:write
data.recordComments:read
schema.bases:read
webhook:manage
```

5. Accordez l’accès à des bases spécifiques ou à toutes les bases
6. Cliquez sur **Create token**

### Option 2 : OAuth 2.0

Pour les intégrations multi-utilisateurs, utilisez le flux OAuth 2.0 :

1. Enregistrez votre intégration sur [airtable.com/create/oauth](https://airtable.com/create/oauth)
2. Configurez l’URI de redirection : `https://app.tajo.io/callbacks/airtable`
3. Demandez les mêmes scopes que ci-dessus

Portée des tokens

Les Personal Access Tokens peuvent être limités à des bases spécifiques. Pour des raisons de sécurité, n’accordez l’accès qu’aux bases dont votre intégration a besoin plutôt que de sélectionner « All current and future bases ».

### Connexion à Tajo

```bash
tajo connectors install airtable \
  --token $AIRTABLE_TOKEN
```

## Configuration

### Configuration de base

```yaml
connectors:
  airtable:
    enabled: true

    sync:
      records: true
      comments: false

    tables:
      - base_id: "appXXXXXXXXXXXXXX"
        table_name: "Customers"
        view: "Active Customers"
        sync_to_list: 28
      - base_id: "appXXXXXXXXXXXXXX"
        table_name: "Products"
        sync_as: "catalog"
```

### Mappage des champs

Mappez les champs Airtable vers les attributs de contact Brevo :

```yaml
field_mapping:
  # Champ Airtable -> Attribut Brevo
  Name: FIRSTNAME
  Email: email
  Phone: SMS
  Company: COMPANY
  Status: LEAD_STATUS
  Revenue: TOTAL_REVENUE
  "Last Contact": LAST_CONTACT_DATE
  Tags: TAGS
  Notes: NOTES
  "Created Time": SIGNUP_DATE
```

### Synchronisation par vue

```yaml
views:
  - base_id: "appXXXXXXXXXXXXXX"
    table_name: "Customers"
    view: "High Value"
    sync_to_list: 29
    filter_by_view: true

  - base_id: "appXXXXXXXXXXXXXX"
    table_name: "Customers"
    view: "Churned"
    sync_to_list: 30
    filter_by_view: true
```

## Endpoints API

Tajo s’intègre avec les endpoints suivants de l’API Web Airtable :

| Endpoint | Méthode | Objet |
| --- | --- | --- |
| `/v0/{baseId}/{tableIdOrName}` | GET | Lister les enregistrements d’une table |
| `/v0/{baseId}/{tableIdOrName}` | POST | Créer des enregistrements |
| `/v0/{baseId}/{tableIdOrName}` | PATCH | Mettre à jour des enregistrements |
| `/v0/{baseId}/{tableIdOrName}` | DELETE | Supprimer des enregistrements |
| `/v0/{baseId}/{tableIdOrName}/{recordId}` | GET | Récupérer un enregistrement unique |
| `/v0/meta/bases` | GET | Lister les bases accessibles |
| `/v0/meta/bases/{baseId}/tables` | GET | Lister les tables d’une base |
| `/v0/{baseId}/{tableIdOrName}/listRecordComments` | GET | Lister les commentaires d’un enregistrement |
| `/v0/bases/{baseId}/webhooks` | POST | Créer un webhook |
| `/v0/bases/{baseId}/webhooks` | GET | Lister les webhooks |

## Exemples de code

### Initialiser le connecteur

```javascript
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('airtable', {
  token: process.env.AIRTABLE_TOKEN
});
```

### Synchroniser une table vers Brevo

```javascript
// Synchroniser une table Airtable vers une liste Brevo
await tajo.connectors.sync('airtable', {
  type: 'full',
  resources: ['records'],
  baseId: 'appXXXXXXXXXXXXXX',
  tableName: 'Customers',
  view: 'Active Customers',
  targetList: 28
});

const status = await tajo.connectors.status('airtable');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-03-15T15:00:00Z',
//   recordsSynced: 2340,
//   tablesMonitored: 2,
//   basesConnected: 1
// }
```

### Gérer les webhooks

```javascript
// Les webhooks Airtable notifient les changements ; récupérez les détails avec un curseur
app.post('/webhooks/airtable', async (req, res) => {
  const { base, webhook, timestamp } = req.body;

  // Récupérer les enregistrements modifiés via le curseur du webhook
  const changes = await tajo.connectors.getWebhookPayloads('airtable', {
    baseId: base.id,
    webhookId: webhook.id,
    cursor: timestamp
  });

  for (const change of changes) {
    await tajo.connectors.handleEvent('airtable', {
      type: change.actionType,
      payload: change
    });
  }

  res.status(200).send('OK');
});
```

### Créer un enregistrement depuis Brevo

```javascript
// Créer un enregistrement Airtable lorsqu'un contact Brevo se convertit
tajo.events.on('contact.attribute_updated', async (event) => {
  if (event.attribute === 'LIFECYCLE_STAGE' && event.value === 'customer') {
    await tajo.connectors.create('airtable', {
      baseId: 'appXXXXXXXXXXXXXX',
      tableName: 'Customers',
      fields: {
        Name: event.contact.name,
        Email: event.contact.email,
        Status: 'Customer',
        'Converted Date': new Date().toISOString().split('T')[0]
      }
    });
  }
});
```

## Limites de débit

Airtable impose des limites de débit par base :

| Type de limite | Valeur |
| --- | --- |
| **Limite de débit API** | 5 requêtes par seconde par base |
| **Enregistrements par requête** | 100 enregistrements max (liste), 10 enregistrements max (création/mise à jour) |
| **Charges utiles webhook** | 50 charges utiles par appel `listWebhookPayloads` |
| **Taille de requête** | Charge utile max ~2 Mo |

Opérations par lots

Airtable autorise la création ou la mise à jour de jusqu’à 10 enregistrements par requête. Tajo regroupe automatiquement les opérations plus volumineuses en plusieurs requêtes tout en respectant les limites de débit.

## Dépannage

### Problèmes courants

| Problème | Cause | Solution |
| --- | --- | --- |
| 401 Unauthorized | Token invalide ou expiré | Régénérez le Personal Access Token |
| 403 Forbidden | Le token n’a pas accès à la base | Ajoutez la base au scope de votre token |
| 404 Not Found | ID de base ou de table invalide | Vérifiez l’ID de la base et le nom de la table |
| 422 Invalid Request | Incompatibilité de type de champ | Vérifiez que les types de champs Airtable correspondent à vos données |
| Limite de débit dépassée | Plus de 5 req/s par base | Réduisez la fréquence de synchronisation ou espacez les synchronisations |

### Mode debug

```yaml
connectors:
  airtable:
    debug: true
    log_level: verbose
    log_api_calls: true
```

### Tester la connexion

```bash
tajo connectors test airtable
# ✓ API authentication successful
# ✓ Base access verified
# ✓ Table schema readable
# ✓ Record listing operational
# ✓ Webhook registration available
```

## Bonnes pratiques

1. **Limitez les tokens à des bases spécifiques**, N’accordez pas l’accès à toutes les bases sauf si nécessaire
2. **Utilisez les vues pour un filtrage ciblé**, Synchronisez des vues spécifiques plutôt que des tables complètes pour réduire le volume de données
3. **Regroupez les opérations sur les enregistrements**, Regroupez les créations et mises à jour par lots de 10
4. **Gérez la pagination**, Airtable renvoie 100 enregistrements par page ; itérez avec `offset`
5. **Utilisez les webhooks pour le temps réel**, Enregistrez des webhooks plutôt que d’interroger les changements
6. **Mappez les types de champs précisément**, Faites correspondre les types de champs Airtable (sélection, nombre, date) aux types d’attributs Brevo

## Sécurité

- **Personal Access Tokens**, Limités à des bases et opérations spécifiques
- **OAuth 2.0**, Flux d’autorisation sécurisé avec tokens de rafraîchissement
- **HTTPS uniquement**, Toutes les communications API chiffrées via TLS 1.2+
- **Contrôle d’accès au niveau de la base**, Tokens limités à des bases individuelles
- **Stockage chiffré**, Tokens chiffrés au repos dans Tajo
- **Vérification HMAC des webhooks**, Vérifie l’authenticité des notifications webhook

## Ressources associées

- [Connecteur Notion](https://tajo.io/fr/docs/connectors/custom/notion)
- [Connecteur GitHub](https://tajo.io/fr/docs/connectors/custom/github)
- [Skill de synchronisation client](https://tajo.io/fr/docs/skills/data-sync/customer-sync)
- [API Contacts Brevo](https://tajo.io/fr/docs/contact-management)
