---
title: "Airtable Connector"
description: "Komplet guide til Airtable-integration til synkronisering af baser, tabeller og poster med Brevo-kontakter og -lister via Tajo."
url: https://tajo.io/dk/docs/connectors/custom/airtable/
markdown: https://tajo.io/dk/docs/connectors/custom/airtable.md
lang: da-DK
robots: noindex
---

Bed om tidlig adgang til Tajo

Indtast dit fornavn og din arbejds-e-mailadresse. Vi sender dig et link til at bekræfte din anmodning om adgang til Tajo.

# Airtable Connector

Connectorstatus: Planlagt Ikke bygget endnu. Tajo kører ikke denne connector i dag.

| Kildefelt | Destinationsfelt | Eksempelværdi |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Forbind dine Airtable-baser med Brevo for CRM-synkronisering, produktkatalogstyring og automatiserede marketing-workflows drevet af strukturerede data gennem Tajo.

## Oversigt

| Egenskab | Værdi |
| --- | --- |
| **Platform** | Airtable |
| **Kategori** | Brugerdefineret |
| **Opsætningskompleksitet** | Let |
| **Officiel integration** | Nej |
| **Synkroniserede data** | Poster, tabeller, brugere |
| **API-type** | REST API |
| **Autentifikation** | Personal Access Token / OAuth 2.0 |
| **Base-URL** | `https://api.airtable.com/v0/` |

## Funktioner

- **Tabel-til-liste-synkronisering** - Synkronisér Airtable-tabelposter direkte til Brevo-kontaktlister
- **Produktkatalogsbro** - Brug Airtable-tabeller som produktkataloger til e-mailanbefalinger
- **CRM-synkronisering** - Tovejssynkronisering mellem Airtable CRM og Brevo-kontakter
- **Formularindsendelseshændelser** - Videresend Airtable-formularindsendelser som Brevo-hændelser
- **Visningsbaseret filtrering** - Synkronisér specifikke Airtable-visninger til målrettede Brevo-lister
- **Webhook-automatisering** - Udløs Brevo-kampagner, når Airtable-poster ændres

## Forudsætninger

Før du begynder, skal du sikre dig, at du har:

1. En Airtable-konto (Free-plan eller derover)
2. Et Personal Access Token eller en OAuth-app konfigureret
3. Adgang til de baser og tabeller, du vil synkronisere
4. En Brevo-konto med API-adgang
5. En Tajo-konto med aktivt abonnement

## Autentifikation

Airtable understøtter Personal Access Tokens og OAuth 2.0.

### Mulighed 1: Personal Access Token (anbefalet)

1. Gå til [airtable.com/create/tokens](https://airtable.com/create/tokens)
2. Klik på **Create new token**
3. Navngiv det “Tajo Integration”
4. Tilføj scopes:

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

5. Tilføj adgang til specifikke baser eller alle baser
6. Klik på **Create token**

### Mulighed 2: OAuth 2.0

Til integrationer med flere brugere skal du bruge OAuth 2.0-flowet:

1. Registrér din integration på [airtable.com/create/oauth](https://airtable.com/create/oauth)
2. Konfigurér redirect-URI: `https://app.tajo.io/callbacks/airtable`
3. Anmod om de samme scopes som ovenfor

Token-scoping

Personal Access Tokens kan scopes til specifikke baser. Af hensyn til sikkerheden bør du kun give adgang til de baser, din integration har brug for, i stedet for at vælge “All current and future bases”.

### Forbind til Tajo

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

## Konfiguration

### Grundlæggende opsætning

```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"
```

### Feltmapping

Kortlæg Airtable-felter til Brevo-kontaktattributter:

```yaml
field_mapping:
  # Airtable field -> Brevo attribute
  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
```

### Visningsbaseret synkronisering

```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
```

## API-endpoints

Tajo integrerer med følgende Airtable Web API-endpoints:

| Endpoint | Metode | Formål |
| --- | --- | --- |
| `/v0/{baseId}/{tableIdOrName}` | GET | Vis poster i en tabel |
| `/v0/{baseId}/{tableIdOrName}` | POST | Opret poster |
| `/v0/{baseId}/{tableIdOrName}` | PATCH | Opdatér poster |
| `/v0/{baseId}/{tableIdOrName}` | DELETE | Slet poster |
| `/v0/{baseId}/{tableIdOrName}/{recordId}` | GET | Hent en enkelt post |
| `/v0/meta/bases` | GET | Vis tilgængelige baser |
| `/v0/meta/bases/{baseId}/tables` | GET | Vis tabeller i en base |
| `/v0/{baseId}/{tableIdOrName}/listRecordComments` | GET | Vis postkommentarer |
| `/v0/bases/{baseId}/webhooks` | POST | Opret en webhook |
| `/v0/bases/{baseId}/webhooks` | GET | Vis webhooks |

## Kodeeksempler

### Initialisér connector

```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
});
```

### Synkronisér tabel til Brevo

```javascript
// Sync an Airtable table to a Brevo list
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
// }
```

### Håndtér webhooks

```javascript
// Airtable webhooks notify of changes; fetch details with cursor
app.post('/webhooks/airtable', async (req, res) => {
  const { base, webhook, timestamp } = req.body;

  // Fetch changed records using webhook cursor
  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');
});
```

### Opret post fra Brevo

```javascript
// Create an Airtable record when a Brevo contact converts
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]
      }
    });
  }
});
```

## Rate limits

Airtable håndhæver rate limits pr. base:

| Grænsetype | Værdi |
| --- | --- |
| **API-rate-limit** | 5 anmodninger pr. sekund pr. base |
| **Poster pr. anmodning** | Maks. 100 poster (list), maks. 10 poster (opret/opdatér) |
| **Webhook-payloads** | 50 payloads pr. `listWebhookPayloads`-kald |
| **Anmodningsstørrelse** | Maks. payload ~2 MB |

Batch-operationer

Airtable tillader oprettelse eller opdatering af op til 10 poster pr. anmodning. Tajo batcher automatisk større operationer i flere anmodninger, samtidig med at rate limits respekteres.

## Fejlfinding

### Almindelige problemer

| Problem | Årsag | Løsning |
| --- | --- | --- |
| 401 Unauthorized | Ugyldigt eller udløbet token | Regenerér Personal Access Token |
| 403 Forbidden | Token mangler base-adgang | Tilføj basen til dit tokens scope |
| 404 Not Found | Ugyldigt base- eller tabel-ID | Verificér base-ID og tabelnavn |
| 422 Invalid Request | Felttypemismatch | Kontrollér, at Airtable-felttyper matcher dine data |
| Rate limit overskredet | Mere end 5 anmodninger/sek. pr. base | Reducér synkroniseringsfrekvensen eller fordel base-synkroniseringer |

### Debug-tilstand

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

### Testforbindelse

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

## Bedste praksis

1. **Scopes tokens til specifikke baser** - Giv ikke adgang til alle baser, medmindre det er nødvendigt
2. **Brug visninger til filtreret synkronisering** - Synkronisér specifikke visninger i stedet for fulde tabeller for at reducere datamængden
3. **Batch postoperationer** - Gruppér oprettelser og opdateringer i batches på 10
4. **Håndtér paginering** - Airtable returnerer 100 poster pr. side; itérér med `offset`
5. **Brug webhooks til realtid** - Registrér webhooks i stedet for at polle efter ændringer
6. **Kortlæg felttyper præcist** - Match Airtable-felttyper (select, number, date) til Brevo-attributtyper

## Sikkerhed

- **Personal Access Tokens** - Scopes til specifikke baser og operationer
- **OAuth 2.0** - Sikkert autorisationsflow med refresh-tokens
- **Kun HTTPS** - Al API-kommunikation krypteres via TLS 1.2+
- **Adgangskontrol på base-niveau** - Tokens scopes til individuelle baser
- **Krypteret opbevaring** - Tokens krypteres i hvile i Tajo
- **Webhook-HMAC-verifikation** - Verificér ægtheden af webhook-notifikationer

## Relaterede ressourcer

- [Notion Connector](https://tajo.io/dk/docs/connectors/custom/notion)
- [GitHub Connector](https://tajo.io/dk/docs/connectors/custom/github)
- [Customer Sync Skill](https://tajo.io/dk/docs/skills/data-sync/customer-sync)
- [Brevo Contacts API](https://tajo.io/dk/docs/contact-management)
